dswybs 发表于 2014-8-31 15:50:36

STCunio真正的数字电源带PID数字闭环

PID库

3.9.1pidbegin(int a,int b,int c)

概述

pidbegin函数的作用是将a、b、c三个参数进行赋值,这三个参数的定义参考上述内容。一般的kp、ki、kd是浮点数,那么a、b、c也是浮点型,所以要在使用pidbegin函数之前需要将a、b、c三个参数进行Q15格式化,即左移15次转换成int,最后我们只需将结果右移15次即可还原。如果使用浮点数来进行PID运算也是可以的,但是浮点数运算会占用大量的时间和存储空间,无论是MCU还是DSP选择整型运算要比浮点运算优越很多。

语法

pidbegin(int a,int b,int c)

参数

a:Q15(Kp + Ki + Kd),int型

b:Q15(-(Kp + 2*Kd),int型

c:Q15(Kd),int型

返回值



示例

#define PID_BOOST_KP 0.23

#define PID_BOOST_KI 0.03

#define PID_BOOST_KD 0.00

#define Q15(X) \
   ((X < 0.0) ? (int)(32768*(X) - 0.5) : (int)(32767*(X) + 0.5))
#define PID_BOOST_A Q15(PID_BOOST_KP + PID_BOOST_KI + PID_BOOST_KD)

#define PID_BOOST_B Q15(-1 *(PID_BOOST_KP + 2 * PID_BOOST_KD))

#define PID_BOOST_C Q15(PID_BOOST_KD)

pidbegin(PID_BOOST_A,PID_BOOST_B,PID_BOOST_C);

3.9.2   pid(int referenceInput,int measuredOutput)

概述

pid就是PID控制算法的核心运算,必须要有参数值和测试值来产生误差,最后返回PID计算结果。在使用PID的结果时需将其右移15位给控制输出,同时根据需要,设置控制输出的上下限值。

语法

pid(int referenceInput,int measuredOutput)

参数

referenceInput:参考输入值,int型

measuredOutput:参考输入值,int型

返回值

long型
郑重声明:MCS-51单片机有112条指令,而不是111条指令,这条未公布指令的机器码就是0xA5,作用是跳过下一个字节,在汇编程序里可以用 “DB 0A5H”作为指令使用。欢迎加入STCunio Studio QQ群:117112538,参与更多的技术交流。

STC单片机开发板、新一代开源硬件,对于创客,它是您创作的好伙伴,无单片机基础也能学会;对于电子工程师或学生,它是您提升能力的好法宝,重基础,重方法。

STCunio,即system on chip unusual i/o,采用类似arduino构架设计,即使没有单片机知识的设计师和艺术家们能够很快地通过它学习电子和传感器的基础知识,并应用到他们的设计当中。设计中所要表现的想法和创意才是最主要的,至于单片机如何工作,设计师和艺术家们并不需要考虑。

本产品采用STC新推出的单片机为核心,为响应众多的开发者和学生的要求,尤其是非电子专业的爱好者,STCunio开发团队设计出一款类似arduino uno的学习板,取名为STCunio R1,STCunio R1引脚排列兼容arduino官方学习板,代码开源,并且供电兼容3.3V和5V。

STCunio R1具有一下特点:

1.      STCunio R1具备自动下载功能

不像其他学习板那样需要用一个带自锁的开关来软启动才能下载程序,软启动即将MCU停电再将其上电。如果我们在调试程序当中若采用这种软启动方式下载程序会觉得有点麻烦了。还有一种市面上采用继电器的方式来控制MCU的VCC来实现软启动,这是当ISP发送下载序列时,串口的DTS发一个跳变的信号,通过捕捉这个信号来控制继电器,这种方法也是有弊端的,假如我们通过串口助手发送一个数据给单片机,那么继电器同样会动作,这样并不是我们所希望的。那么STCunio R1自动下载的原理到底是什么呢?

其实原理非常简单,将串口设置为8位数据、中断模式,当ISP下载程序时会有个下载序列,其实是很多个0x7f,当MCU接收0x7f至少16次以上时,这时MCU认为是下载命令,将寄存器IAP_CONTR赋值0X60,那么系统就会跳到ISP监控程序区,这个区是STC厂家做的固件,MCU软启动之后也会进入这个区检测下载流,之后才会进入用户代码区。当然这是要编写一点简单的代码,代码已经编写好在USART1.c中,这个代码我们称之为bootloader,在每次下载程序的时候都把bootloader加到程序中即可,此外我们要在main()函数中加“Serialbegin(2400);”,操作简单吧。

有两点需要注意的:

1ISP界面有“最低波特率”,当我们每次打开ISP时最低波特率默认是2400,如果要选择更高的波特率,比如115200,那么我们只需要在Serialbegin ()函数中修改的参数改成115200。

2系统时钟的设置,当我们使用不同的系统时钟只需在config.h中设置MAIN_Fosc,这个是由宏来定义的。

以上两点如果没有设置对,那么就实现不了自动下载。学习板上既然没有自锁开关,那MCU怎么来软启动呢?这里我们也有考虑到,做了一个电子开关来控制MCU的VCC,电子开关由一个轻触按键来控制,这种实现软启动的方法也比用自锁开关开发方便,只需轻轻一按就可以实现软启动。

2.      C语言程序开发,没有C语言基础的学者也不用担心,只要稍微学习一下就会用了。

STCunio是开源的,并且大家可以在库函数里进行修改、升级。

STCunio函数库

3.1数字IO

3.1.1 pinMode(pin,mode)

3.1.2digitalWrite(pin,value)

3.1.3pinInvert(pin)

3.1.4digitalRead(pin)

3.2模拟IO

3.2.1 analogRead(analogPin)

3.2.2 analogWrite(pin,u8 value,u8 PCA_Clock_xT)

3.3高级IO

3.3.1 tone(pin,u16 frequency)

3.3.2 noTone(pin)

3.3.3 shiftOut(dataPin, clockPin, bitOrder, u8 value)

3.3.4shiftIn(dataPin, clockPin, bitOrder)

3.4时间函数

3.4.1 delay_ms(u32 ms)

3.4.2delay_10us(u16 _10us)

3.5位操作

bitRead(value, bit)

bitSet(value, bit)

bitClear(value,bit)

3.6串口


3.6.1Serialbegin(u32 baud)

3.6.2stdio.h常用库函数


3.7SPI接口


3.7.1SPIbegin()

3.7.2SPIsetBitOrder(u8 bitOrder)

3.7.3SPIsetClockDivider(u8 rate)

3.7.4   SPIsetDataMode(u8 mode)

3.7.5   SPItransfer(u8 _data)


3.8数学函数


3.9PID

3.9.1pidbegin(int a,int b,int c)

3.9.2   pid(int referenceInput,int measuredOutput)

机器人优秀的控制算法怎么能少得了PID控制算法呢

此外还有其他模块的库函数
步进电机的
void steppersetSpeed(u16 rpms);
Stepperstepper(int steps,pin1,pin2,pin3,pin4);
void step(int steps);
舵机的
void servoWrite(pin,u16 angle);
void servoAttch(pin);
void servoDetach(u8 pin);
……

dswybs 发表于 2014-8-31 17:24:24

给大家来点直接的,把PID程序和库函数说明贴上

jyrpxj 发表于 2014-8-31 17:28:47

这个要顶起。 PID控制 代码。

huangdog 发表于 2014-8-31 17:31:33

哈哈~STC核心的ardunio嘛~

笑笑我笑了 发表于 2014-8-31 17:31:48

我是觉得啊,别人arduion的优势在于编程语言简单,你这还是用C语言。
不如直接STM32,功能又强大资料又多库做的又好。

dswybs 发表于 2014-8-31 17:32:15

嗯嗯……一语中的

dswybs 发表于 2014-8-31 17:53:39

“我是觉得啊,别人arduion的优势在于编程语言简单,你这还是用C语言。
不如直接STM32,功能又强大资料又多库做的又好”
有了这些库C语言编程一样简单,难得是我编库麻烦,STC单片机已经是片上系统了,功能照样强大{:smile:}

笑笑我笑了 发表于 2014-8-31 18:03:50

dswybs 发表于 2014-8-31 17:53
“我是觉得啊,别人arduion的优势在于编程语言简单,你这还是用C语言。
不如直接STM32,功能又强大资料又多 ...

是C语言本身的一些特性导致编程困难的,比如说强类型,指针什么的,而且只是LZ自己觉得编程简单了……
劝LZ去用用STM32的库再回来把自己的库重写了吧。

dswybs 发表于 2014-8-31 18:31:41

谢谢你的建议,以后会用STM32

机器人天空 发表于 2014-8-31 18:52:35

楼主,你那按键叫什么名字

dswybs 发表于 2014-8-31 18:56:06

硅橡胶按键

llssr 发表于 2014-8-31 20:53:47

顶楼主,厉害!最近要用到PID,下载学习下

willX 发表于 2014-8-31 22:46:50

dswybs 发表于 2014-8-31 18:56
硅橡胶按键

淘宝上搜索“硅橡胶按键”搜不到啊?
你这个按键是自己买的吗? 该怎么跟店家说这种按键啊?谢谢啦。

dswybs 发表于 2014-8-31 22:53:05

请把我的照片发给对方就行了

Honey_comb 发表于 2014-9-1 13:30:28

stc 数字电源+自动下载,mark

tam2907 发表于 2014-9-1 13:32:31

这电源的负载响应怎么样?

second_chan 发表于 2014-9-1 13:49:51

谢谢分享。。。

xjtyOnly51 发表于 2014-9-1 14:00:30

mark, thanks

qs6361036 发表于 2014-9-1 15:19:22

很好的资料   正好在弄PID
谢谢啦

nhw1234 发表于 2014-9-1 16:06:37

好东西,学习了

lisingch 发表于 2014-9-1 22:59:19

好好研究下。

悟空间66 发表于 2014-9-3 10:15:02

悟空间 支持。。。

tomy 发表于 2014-9-4 16:01:47

支持!借鉴来用下。谢LZ

Puppey 发表于 2014-9-6 21:28:30

碉堡了=-= PID部分可以参考参考

哼嘿哈嘿哈 发表于 2014-11-21 23:51:58

库不错 手机先标记下

墨逸、 发表于 2014-11-23 22:43:56

必须顶一下。。。其实我是来看PID的

mvip 发表于 2014-11-24 08:22:05

先收藏,谢谢了

star_tale 发表于 2014-11-24 08:59:42

q15格式化比较感兴趣啊,这个对计算精度影响有多大

clcicoccad 发表于 2014-11-30 10:37:26

下载下来研究研究,谢谢分享

tbcrv 发表于 2014-11-30 13:20:34

看着很牛b,顶一下。

zxq_9781 发表于 2014-11-30 23:07:37

收藏了,学习一下

eliterxzgxu 发表于 2014-12-1 12:49:28

收藏了,学习一下

face9 发表于 2014-12-3 23:03:34

对STCunio无爱,想看PID。

niu14789 发表于 2014-12-15 11:28:33

mark~~~~~~~~~~~~~~~~~

freshuman 发表于 2014-12-15 11:42:42

不错,没有说线性度好不好。

xpstudio2011 发表于 2014-12-22 12:37:16

1。楼主可以KEIL外再包一层软件。就像ARDUINO的软件包了一下GCC一样。降低硬件改变造成的程序修改
2。ARDUINO后台有一个计时器中断一直在跑。s, ms us, 都可以随时调用函数获取。使用方便。时间还算比较精确。

结合1。2。 这样程序在移植到不同版本的ARDUINO下同样可用。非常可靠顺。

brmxd 发表于 2014-12-22 17:33:30


谢谢分享

dianzidianzi 发表于 2014-12-24 13:19:33

学习学习

32MCU 发表于 2014-12-25 09:26:13

支持!收藏。

yubo2007 发表于 2014-12-25 11:57:06

谢谢分享

文章小生 发表于 2014-12-25 17:54:34

PID竟然搞个库文件。没见到源文件呀。

soosqt 发表于 2014-12-25 22:25:56

呵呵,楼主本来就说是库了

dswybs 发表于 2014-12-26 13:23:02

文章小生 发表于 2014-12-25 17:54
PID竟然搞个库文件。没见到源文件呀。

源文件在此
http://www.amobbs.com/thread-5609262-1-1.html
(出处: amoBBS 阿莫电子论坛)

LK9286 发表于 2014-12-26 13:46:03

收藏了哈

motodefy 发表于 2014-12-26 13:54:03

看着还不错,改天搞个玩玩{:lol:}

1ongquan 发表于 2014-12-28 23:45:40

作为伸手党,非常关心带负载的动态响应如何

墨逸、 发表于 2015-1-19 20:01:02

不错,支持下!!!{:loveliness:}

able 发表于 2015-1-22 09:02:24

不错,学习学习。

STCunio 发表于 2015-1-22 12:52:18

able 发表于 2015-1-22 09:02
不错,学习学习。

请到这个帖子下载源代码

http://www.amobbs.com/thread-5609262-1-1.html
(出处: amoBBS 阿莫电子论坛)

shi_90 发表于 2015-1-22 14:08:41

学习学习!不错嘛!!

chun_hua82 发表于 2015-1-22 21:55:16

dswybs 发表于 2014-8-31 17:24
给大家来点直接的,把PID程序和库函数说明贴上

PID 研究研究 谢了

Tonyxiao 发表于 2015-1-30 16:00:03

学习了,收下先。

wt13568089592 发表于 2015-2-6 11:32:54

支持啊

huangqi412 发表于 2015-2-6 12:46:26

楼主买的按键好别致

sylisi 发表于 2015-3-17 15:29:53

楼主,好厉害

BRN 发表于 2016-2-5 10:28:23

学习一下。。。。

dory_m 发表于 2016-2-5 10:45:43

学习,谢谢!!!

hejie126 发表于 2019-8-15 07:32:00

关心这数字电源的负载动态响应

lqwuliang12345 发表于 2023-5-23 09:07:06

页: [1]
查看完整版本: STCunio真正的数字电源带PID数字闭环