嵌入式操作系统在炉温控制中的应用-曹益发 - 图文(5)

2019-08-31 15:34

附录:

电炉控制原理图

1.测温电路PCB

2.电炉控制电路PCB

18

程序清单

1.AD采样和转化

AD初始化

/********************************************************************** Function name: ADCInit

** Descriptions: P2.0触发ADC转换初始化 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无

*******************************************************************/ void ADCInit()

{ SYSAHBCLKCTRL |= (0x01 << 16); /*配置PIO0_11为模拟输入模式*/ PDRUNCFG &= ~(0x01 << 4); /* ADC模块上电*/

SYSAHBCLKCTRL |= (0x01 << 13); /* 使能ADC模块时钟*/

IOCON_PIO0_11 &= ~0xBF; /* 设置PIO0_11为模拟输入模式 */ IOCON_PIO0_11 |= 0x02; /* PIO0_110模拟和输入通道零*/ AD0CR = ( 0x01 << 0 ) | /* SEL=1,选择ADC0*/

(( FAHBCLK / 1000000 - 1 ) << 8 ) | /* 转换时钟1MHz*/ ( 1 << 16 ) | /* BURST=1,使用Burst模式 */ ( 0 << 17 ) | /* 使用11 clocks转换 */ ( 0 << 24 ) | /* 当P0.2出现bit27所选的 */ /* 延时产生中断 */ ( 0 << 27 ); /* 直接启动ADC,此位无效 */ }

2.显示和按键实现

显示和按键为一整体,采用SPI控制 void SPI_INIT(void) {

PRESETCTRL |= 0x01; /* 禁止SPI0复位 */

//IOCON_SCKLOC = 0x1002 /*如果在头文件中改成了SPI功能就不需要设置*/ SYSAHBCLKCTRL |= 1<<11; /* 打开SPI0外设 */ SSP0CLKDIV = 0x01; /* SSP时钟分频 */

SSP0CR0 = (0X01 << 8)| /* SCR 设置SPI时钟分频 */ (0x01 << 7)| * CPHA 时钟输出相位, */ /* 仅SPI模式有效 */ (0x01 << 6)| /* CPOL 时钟输出极性, */ /* 仅SPI模式有效 */ (0X00 << 4)| /* FRF 帧格式 00=SPI,01=SSI, */ /* 10=Microwire,11=保留 */ (0x07 << 0); /* DSS 数据长度,0000-0010=保留*/ /* 0011=4位,0111=8位,1111=16位 */

19

SSP0CR1 = (0x00 << 3)| /* SOD 从机输出禁能,1=禁止 */ (0x00 << 2)| /* MS 主从选择,0=主机,1=从机 */ (0x01 << 1)| /* SSE SSP使能 */ (0x00 << 0); * LBM 回写模式 */ SSP0CPSR = 2; /* PCLK分频值 */ SSP0ICR = 0x03; /* 中断清除寄存器 */ }

uint8 SPISendData(uint8 data) { SSP0DR = data;

while ((SSP0SR & 0x01) == 0)

{ /* ; }

return(SSP0DR);}

void BCD_iDATA(int x,int y,int z) {

iDATA[7] =x/100; iDATA[6] =x0/10; iDATA[5] =x; iDATA[4] =y;

iDATA[3] =(z/100); iDATA[2] =(z/10); iDATA[1] =(z); iDATA[0] =z*100;

}

uint8 KEY_Get(uint8 key_data) {

static uint8 key_down = 0; static uint16 dly_time = 0; uint8 key_reust = 12; if( 0 == KEY_DATA()&& 0 == key_down) {

key_down = 1; } else {

if(1 == key_down) {

dly_time++;

if(dly_time >= delaytime) {

dly_time = 0; key_down = 0;

key_reust = key_data;

20

等待TFE置位,即发送FIFO空 */

}

} } }

return key_reust;

3.PID实现

/**************************************************************************

** 函数名称: CalPID

** 函数描述: 根据偏差值调节PWM占空比 ** 输入参数: 第一次的偏差值 ** 输出参数: 无 ** 返回值 : PWM

**************************************************************************/

int CalPID(int ek) {

static int ek1 = 0,ek2 = 0; static int PWM = 0;

PWM = PWM + Kp*(ek - ek1)+ Ki*ek + Kd*(ek - 2*ek1 + ek2); if (PWM >= 100) {

PWM = 100; }

if (PWM <= 0) {

PWM = 0; }

ek2 = ek1; ek1 = ek; return PWM; }

4.串口实现

通过程序,实现PC机和系统的通信,其初始化程序如下。

/**************************************************************************

** 函数名称:UART0_Init

** 函数功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200

** 入口参数:无 ** 出口参数:无

**************************************************************************/

void UART0_Init(void)

21

{

INT16U usFdiv;

SYSAHBCLKCTRL |= (1<<12); /* 打开UART功能部件时钟 */

UARTCLKDIV = 0x01; /* UART时钟分频 */

U0LCR = 0x83; /* 允许设置波特率 */

usFdiv = (FAHBCLK/UARTCLKDIV/16)/UART_BPS; /* 设置波特率 */

U0DLM = usFdiv / 256; U0DLL = usFdiv % 256;

U0LCR = 0x03; /* 锁定波特率 */ U0FCR = 0x87; /* 使能FIFO,设置8个字节触发点 */ U0IER = 0x01; }

5.主函数

/**************************************************************************

** Function name: main ** Descriptions: ** input parameters: 无 ** output parameters: 无 ** Returned value: 无

**************************************************************************/

int main (void) {

targetInit(); // 初始化目标板,切勿删除 pinInit(); // 引脚初始化

SYSAHBCLKCTRL |= (1ul << 6); // 使能GPIO模块时钟

TinyHMIInit(); //数码管驱动初始化 ADCInit(); //模数转换初始化 SysTickInit(); //系统时钟初始化 UART0_Init(); //串口初始化

Temp_PID_Init();//温度PID调节初始化 //print(ShowBuf); //数码管显示初始化 SetPwmOut(0);

22

//BEEP_INIT();

while (1) 话 } }

{

Data_dis_play(Get_ADCData()); //数码管显示,不用数码管显示可以去掉这句

23


嵌入式操作系统在炉温控制中的应用-曹益发 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:水利工程施工质量自检检测计划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: