STM32单片机(精选10篇)
STM32单片机 篇1
1 概述
近年来,美国的达拉斯半导体公司(DALLAS SEMI-CONDUCTO R)推出了一项特有的单总线(1-Wire Bus)技术。它采用单根信号线,既以可传输时钟,又能传输数据,而且数据传输是双向的,因而这种单总线技术具有线路简单,硬件开销小,成本低廉,便于总线扩展和维护等优点。单总线适用于单主机系统,能够控制一个或多个从机设备。当只有一个从机设备时,系统可按单节点系统操作;当有多个从机设备时,系统则按多节点系统操作[1]。在单片机上,往往需要用I/O口模拟DS18B20的通信时序,进行操作指令的发送、返回相应的识别。这意味着上位机的CPU需要在通信的过程中不断通过计算来产生需要的电平时序,或者识别由下位机返回来的电平信息。在多个传感器组成传感器组通过单总线进行测温时,这种I/O口模拟时序的方法对单片机的CPU必然产生较大的占用率。作为一款功能多样的芯片,让它用来采集温度往往是其在工程上众多作用的其中之一而已,意味着单片机的有限的CPU处理能力需要处理多个任务,当某项任务占用CPU时间较多时,必定影响了工程的整体计算效果。如何让CPU的计算量变小,也是一项很值得研究的课题[2]。
文章目的是通过使用单片机的USART口、定时器、中断系统、完成采样控制系统的设计,使得单片机在作为多温度传感器测温系统中的上位机时,比用传统I/O口模拟时序通信时更加少的占用CPU时间。
1.1 系统的设计思路
本设计采用了STM32F407单片机作为核心芯片,只需接上电源、LCD显示器和搭好DS18B20的少量电路,即可完成硬件部分的搭建。其次,将原理上的电平逻辑转换为代码形式进行编写。这些代码包括I/O口的配置及使用、USART功能的配置及使用、DMA的配置及使用、LCD显示屏的驱动代码和DS18B20的驱动代码,这部分也是整个设计最难的部分。最后,在软硬件都搭建好的基础上对该设计进行测试验证,看功能是否符合预期效果。
1.2 系统软件描述(图1)
2 温度传感器DS18B20
DS18B20数字式温度传感器的外部形状如图2所示。DS18B20的电路很简单,由一片DS18B20和一只4.7kΩ的上拉电阻构成。DS18B20内集成了一个温度传感器、64位ROM、9字节RAM、3字节EERAM(掉电可保存),可将温度信号转换为数字信号直接输出。DS18B20与外部的接口为单总线方式,即数据的输入、输出及同步均由同一根线完成。其温度测量范围为-55℃~125℃,在-10℃~80℃范围内精度为±0.5℃,输出的温度值可编程为9~12位。VD接电源,3V~5V;GND为地;DQ为数据的输入输出。DQ作为输出时为漏极开路,必须加4.7kΩ的上拉电阻。
由图3可知,复位脉冲由上位机发出,由一个下降沿开始,低电平持续480us,然后以恢复高电平结束;存在脉冲由下位机发出,由一个下降沿开始,低电平持续60~240us,然后以恢复高电平结束,整个存在脉冲持续480us。
上位机如何对传感器写入1位数据呢?DS18B20的逻辑是这样的:上位机对数据口写入由下降沿开始的低电平保持60us-120us,再回到高电平,即为写入了一位“1”;而对数据口写入由下降沿开始的低电平保持60us以上,再恢复高电平,即为写入了一位“0”。写入“一位”的过程不需要下位机应答。
对于“读”功能,DS18B20的逻辑是:上位机向下位机发送一个电平,下位机就开始发送“一位”,如此循环多次,完成多个字节的读取功能。上位机对传感器读“0”的过程是:上位机发送一个下降沿并持续低电平,传感器接收到这个信号后,则发回一个以低电平开始持续45us,然后以高电平结束的脉冲;上位机对传感器读“1”的过程则是:上位机同样发送一个下降沿并持续低电平,传感器接收到这个信号后,则发回一个高电平作为应答。(图4)
2.1读取传感器温度
DS18B20的内部数值寄存器有两个,分别存储了温度值高8位与低8位的数值。我们用单片机读取DS18B20的温度值时,是分两次读取的,每次读取一个字节,这两次读取的分别是温度值的低8位数据以及高8位数据[3],我们需要对这两个字节进行整合。整合后的这个数值,是一个16位二进制数,包含了温度值的符号、绝对值整数部分以及绝对值的小数部分,因此可以想到它并不能直接转换成10进制数,其转换规则为
设DS18B20的16位二进制温度值为temp,则其转换为十进制的逻辑为:
当高四位是1111时,则温度为负值,其绝对值是
temp=(~temp+1)*625
当最高位不是1111时,则温度为正值,其绝对值是
temp=temp*625
通过这个规则,可以简单地得到想要的十进制温度值。
2.2 DS18B20用串口模拟时序
串口通讯的波形结构如图5所示。
传感器的时序在空闲时都是高电平的,这与串口通信的空闲电平是一致的。第二点,不管是“复位”脉冲、“存在”脉冲还是“1”和“0”的脉冲,都是以低电平开始、高电平结束的,这与串口通信的“以低电平作为起始位,以高电平作为结束位”构成也一致。综上所述,串口通信具备了能实现与DS18B20通信的必要前提。接下来,只要测试串口发出的数据电平是否能符合传感器的通信时序,就可以确定串口能否与DS18B20实现完全通信了。
3 硬件调试部分
3.1 对DS18B20进行调试
给两块DS18B20分别发出读取64位序列码的指令,若能获取到序列码,说明传感器的初始化功能、读写功能都正常。传感器返回的内容通过keil5内置的debug功能来查看[4]。
在主函数中加入DS18B20传感器的初始化函数和“读序列号”功能指令,如图6。
0x33是读取传感器序列码的指令,传感器接收到该指令后,会给上位机发出64位序列码,这64位序列码在程序中被存储在数组rom中。对两个传感器进行读取的序列码如图7、图8。
由图7、图8可知,这两个温度传感器的序列号分别是
3.2 整体调试
元器件间接线及温度显示画面如图9、图10。
4 结论
实验结果表明,用串口是完全可以实现与DS18B20温度传感器进行通信的。传统的I/O口模拟DS18B20时序需要上位机的CPU不断计算要发送的电平的时序,也要计算识别收到的指令信息,而不同指令时序之间的间隔也需要CPU进行延时计算,可以说,用I/O口模拟时序是需要CPU一直对程序进行计算的,即一直占用着一部分CPU资源。当用UART口来与DS18B20进行通信,由于串口数据的电平结构是空闲电平为高电平,结束位也是高电平,所以省去了大部分延时操作。
另外,电平的发出基于CPU输出的UART数据,即CPU只需要往串口设备发送一个字节即可发送一位数据给下位机,这一部分又省去了延时函数对CPU的占用。可以说,用UART口与DS18B20进行通信,比用I/O口模拟时序进行通信大大降低了CPU的计算量,提高了CPU的使用效率,这种优势在多传感器的单总线系统中将更加明显。
摘要:传统的DS18B20数字温度传感器的设计是利用单片机的I/O口模拟单总线完成数据的读取,由于I/O口时序完全由CPU计算得出,所以会占用较多的CPU时间。文章采用STM32F407单片机,将实现传统的I/O模拟时序的方式实现与DS18B20传感器进行通信实现多点温度采集,并在此基础上改用UART异步串口功能来实现对DS18B20温度传感器进行多点温度采集,从而减少对CPU的占用时间。
关键词:STM32F407,UART,DS18B20温度传感器
参考文献
[1]陈志英,李光辉.单总线(1-Wire Bus)技术及其应用[J].国外电子元器件,2003(08).
[2]张军.智能温度传感器DS18B20及其应用[J].仪表技术,2010.
[3]常江,胡丹,常亮.串行通讯中的波特率设置和误差分析[J].四川工业学院学报,2004.
[4]林立,张俊亮.单片机原理及应用-基于Proteus和Keil C[M].电子工业出版社,2013(01).
STM32单片机 篇2
先大致说下通用和高级定时器的区别。通用的可以输出四路pwm信号互不影响。高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路。
所以这样算下来stm32一共可以生成4*5+7*2=30路pwm信号。接下来还有功能上的区别:通用定时器的pwm信号比较简单,就是普通的调节占空比调节频率(别的不常用到的没去深究);高级定时器的还带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能,从这些看来高级定时器的pwm天生就是用来控制电机的。
Pwm输出最基本的调节就是频率和占空比。频率当然又和时钟信号扯上了关系。高级定时器是挂接到APB2上,而通用定时器是挂接到APB1上的。APB1和APB2的区别就要在于时钟频率不同。APB2最高频率允许72MH,而APB1最高频率为36MHZ。这样是不是通用定时器只最高36MHZ频率呢,不是的;通用定时器时钟信号完整的路线应该是下面这样的: AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→倍频器(*2倍)→通用定时器时钟信号(72mhz)。
在APB1和定时器中间的倍频器起到了巨大的作用,假如红色字体的“APB1分频器”假如不为1(默认是2),倍频器会自动将APB1时钟频率扩大2倍后作为定时器信号源,这个它内部自动控制的不用配置。设置这个倍频器的目的很简单就是在APB1是36mhz的情况下通用定时器的频率同样能达到72mhz。我用的库函数直接调用函数SystemInit();这个函数之后时钟配置好了:通用定时器和高级定时器的时钟现在都是72mhz(你也可以自己再配置一下RCC让他的频率更低,但是不能再高了)。定时器接下来还有一个分频寄存器:TIMX_PSC经过他的分频后,才是定时器计数的频率。所以真正的时钟频率应该是72mhz/(TIMX_PSC-1),我们设为tim_frepuency下面还会用到。
stm32的时钟频率弄得确实是很饶人的,所以关键就是先要把思路理清楚。时钟的频率弄好了下面终于可以开说重点PWM了。当然还少不了频率:pwm主要就是控制频率和占空比的:这两个因素分别通过两个寄存器控制:TIMX_ARR和TIMX_CCRX。ARR寄存器就是自动重装寄存器,也就是计数器记到这个数以后清零再开始计,这样pwm的频率就是tim_frequency/(TIMX_ARR-1)。在计数时会不停的和CCRX寄存器中的数据进行比较,如果小于的话是高电平或者低电平,计数值大于CCRX值的话电平极性反相。所以这也就控制了占空比。
下面是定时器1的配置代码:
GPIO_InitTypeDef GPIO_InitStructure2;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
//第一步:配置时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_GPIOB|RCC_APB2Periph_TIM1,ENABLE);
//第二步,配置goio口
/********TIM1_CH1 引脚配置*********/
GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;
//设置为复用浮空输出
GPIO_Init(GPIOA,&GPIO_InitStructure2);
/*********TIM1_CH1N 引脚配置********/
GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;
//设置为复用浮空输出
GPIO_Init(GPIOB,&GPIO_InitStructure2);
//第三步,定时器基本配置
TIM_TimeBaseStructure.TIM_Period=1000-1;
// 自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler=72-1;
// 时钟预分频数
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;//重复寄存器,用于自动更新pwm占空比
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
//第四步pwm输出配置
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
//设置为pwm1输出模式
TIM_OCInitStructure.TIM_Pulse=500;
//设置占空比时间
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
//设置输出极性
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
//使能该通道输出
//下面几个参数是高级定时器才会用到,通用定时器不用配置
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;
//设置互补端输出极性
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//使能互补端输出
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;
//死区后输出状态
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//死区后互补端输出状态
TIM_OC1Init(TIM1,&TIM_OCInitStructure);
//按照指定参数初始化
//第五步,死区和刹车功能配置,高级定时器才有的,通用定时器不用配置
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;//运行模式下输出选择
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;//空闲模式下输出选择
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
//锁定设置
TIM_BDTRInitStructure.TIM_DeadTime = 0x90;
//死区时间设置
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
//刹车功能使能
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;//刹车输入极性
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//自动输出使能
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
//第六步,使能端的打开
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);//使能TIMx在CCR1上的预装载寄存器
TIM_ARRPreloadConfig(TIM1, ENABLE);
//使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM1,ENABLE);
//打开TIM2
//下面这句是高级定时器才有的,输出pwm必须打开
TIM_CtrlPWMOutputs(TIM1, ENABLE);
//pwm输出使能,一定要记得打开
STM32单片机 篇3
关键词:STM32;行车安全;微波测距;灯光控制
中图分类号:TP368 文献标识码:A 文章编号:1674-098X(2015)06(b)-0000-00
驾驶员在行车时,难免会遇到会车、超车的情形,特别是在夜间行车时,相向行驶的汽车灯光和超车时反光镜里的反射光会严重影响驾驶员的视觉,从而容易引发交通事故。本文介绍了一套智能测距及自动切换远近光灯的系统,如果汽车行驶前方有物体迅速靠近,该系统会立刻警示驾驶员进行规避以免相撞,当夜间相向行驶的汽车达到一定距离或者司机有超车意向时,该系统还可以自动将远光灯调节为近光灯,以免对对方驾驶员视觉造成影响,从而降低事故发生率。
1行车安全及照明系统原理图
系统原理图如图1所示,该系统以STM32F103C8T6为核心,通过检测光线以及相对速度进而判断是否进行声光报警以及灯光切换操作。
图1 系统原理图
2 系统硬件设计
2.1 Cortex-M3主控芯片
主控芯片采用意法半导体公司推出的高性能、低成本、低功耗的微处理器芯片STM32F103C8T6,该芯片最高工作频率可达72MHZ,具有12道DMA并支持定时器、ADC、DAC、SPI、IIC和UART等外设,资源丰富,完全可以满足本系统的设计要求。
2.2 微波测距方案
测距部分采用微波传感器[1],安装在车前,用来检测本车前方是否有障碍物,在夜间行驶中,微波传感器发射微波信号,遇到障碍物时,微波信号可以反射回来,微波传感器接收到反射回来的微波信号,经过合理的信号处理电路处理,进而判断车辆与障碍物的的相对运动状态,做出相应的措施。如果对方车辆开启远光灯导致本车驾驶员无法看清前面道路状况,则微波测距传感器会检测前方是否有障碍物快速接近,如果有则会提醒驾驶员小心驾驶,减速行驶或者缓慢停车,从而能够降低相关事故的发生率。
2.3 光线强度检测电路
夜间行车时,如果对方车辆是利用远光灯行驶,则会对自己的视觉造成严重影响,进而容易发生交通事故。所以,本系统会频繁切换远近光灯,以此给对方一个提醒作用,提示对方切换为近光灯行驶,如果对方变为近光灯,则本系统将会打开近光灯行驶。
灯光检测电路原理如图2所示
图2 系统原理图
当对方车辆为远光灯时,入射光线近似平行光,经反光环汇聚到硅光电池上,从而判断出对方为远光灯[2],并进行相应的灯光切换动作。
2.4 声光报警及灯光自动控制
声音信号利用蜂鸣器来产生,并利用S8550三极管进行驱动;光信号利用红色LED产生。在汽车行进时,微波雷达不停的探测前方物体与本车的相对速度,当相对速度超过50Km/h时,即将要发生撞车危险,此时主控器发出信号使三极管导通,从而使蜂鸣器开始工作进行声音警示,同时LED急促闪烁提供视觉警示。
3 系统软件设计
系统工作时为保证雷达测量精度,微波的发射和接收全部利用STM32F103C8T6的通用定时器进行定时计算。利用定时器2每隔1秒钟中断一次,并在中断中进行微波发射操作,利用定时器3测定反射波的频率。定时器2的初始化函数如下:
void TIM2_Int_Init()
{
RCC->APB1ENR|=1<<0;//TIM2定时器使能
TIM2->ARR=10000; //设定计数器自动重装值
TIM2->PSC=7199; //预分频器设置
TIM2->DIER|=1<<0; //允许更新中断
MY_NVIC_Init(2,2,TIM2_IRQn,2);//抢占1,子优先级2,组2
}
4 测试结果
测试结果见表1,光线强度:夜间行车时,模拟的夜间道路光线强度;本车车速:模拟夜间行车时的车速;相对速度:模拟夜间行车时,会车和超车时的相对速度;探测距离:当本车车灯发生改变时,两车的距离。
表1 测试结果
光线强度(cd)本车车速(m/s)相对速度(m/s)探测距离(m)测量次数
200.50.50.3810
201.00.50.4010
201.51.00.3710
300.50.50.3410
301.00.50.3510
301.51.00.3310
400.50.50.3210
401.00.50.3410
401.51.00.3110
5 结束语
该作品是根据速度和雷达信息,判断汽车与汽车、汽车与行人之间的相互状态,并控制灯光切换,实现对远近灯光的自动控制。可以有效避免驾驶员主观不规范使用灯光,造成的事故。样机采用先进的嵌入式系统技术,功能扩展和集成能力很强。可以在汽车领域进行大力推广,并可以把该技术集成到汽车现有灯光控制系统中,提高汽车灯光控制的自动化水平。
参考文献
[1] 吕光辉. 基于单片机技术的汽车远近光自动切换装置的研究[J].汽车与配件,2013(35):12-15.
STM32单片机 篇4
为了解决传统信箱容易发生的锁孔堵塞、钥匙丢失、信件丢失、浪费空间、垃圾广告等问题, 保护信件的安全、有效, 我们设计了一个智能信箱系统。它采用封闭式管理和细化空间、动态分配的存储理念, 增加了安全性, 提高了用户数量。它还具有身份验证、来信提示、网络查询等功能, 可以广泛应用于小区、学校、医院、企业等。
一、整体构架
智能信箱的系统构架主要有两部分, 即控制系统与机械设备。控制系统用于保存和管理用户与信件的信息, 下达“存”或“取”的命令给机械设备, 它包括主控芯片模块、存储器、触摸屏、网络接口、实时时钟、电磁继电器、步进电机驱动器等;机械设备则负责执行控制系统下达的命令, 完成信件的存取过程, 它包括带步进电机的线性十字滑轨以及用于存放信件的存储阵列等。
二、存/取信件的具体实现
存/取信件是系统的主要职能。用户执行存信或取信操作时, 系统会进入存储器中查询相关的用户信息和存储信息, 根据一系列算法, 算出十字滑轨上滑台的运动轨迹, 用电机驱动滑台按照轨迹执行存/取信任务, 完成任务后, 系统自动更新存储器中的信息, 保持与存储阵列内的情况一致。
2.1线性十字滑轨。线性十字滑轨是信箱系统当中实施机械动作的部分, 为了保证系统的精确性, 我们采用了滚珠丝杠十字滑轨。它由两副正交安装的滚珠丝杠副和滑台组成, 水平滚珠丝杠副安装在竖直滚珠丝杠副上, 形成一个平面直角坐标系, 信件就被存储在这个坐标系里。每副滚珠丝杠副都由一个步进电机来驱动, 通过控制输出脉冲个数来控制角位移量, 再通过滚珠丝杠副将角位移转换为线性位移, 达到准确定位的目的。
2.2脉冲数控制算法。在脉冲输出上, 我们采用了PWM (Pulse Width Modulation) 脉冲输出。当系统进入存/取信件任务时, 系统读出目标单元格在存储阵列中的横纵坐标值, 计算出两幅滑轨的运行距离, 从而确定每个步骤必须输出的脉冲数量。脉冲数的计算公式:
其中P为脉冲数, C为当前步骤操作的坐标值, D为单位坐标值的实际距离, S为滚珠丝杠的导程, α为步进电机的步进角, 一般为1.9°, n为步进电机驱动器的细分数。
在编程实现上, 我们使用了两个定时器, 其中TIM2作为脉冲计数器, TIM3作为PWM发生器, 工作原理阐述如下: (1) 将TIM3设置成PWM输出模式, 不断地输出PWM脉冲序列; (2) 将TIM2设置成外部触发模式, 用作脉冲计数器; (3) 将TIM3的PWM输出连接到TIM2的脉冲输入上, 使能TIM3, 就可开始记数; (4) 将TIM2的溢出值设定为步进电机所需的脉冲数P, 一旦计得所需脉冲数, 立即进入中断, 关闭TIM3的使能, 停止脉冲输出, 这个过程远快于PWM的输出频率, 可以实现精确控制输出脉冲数。
2.3空间管理方法。传统信箱采用的是一人一格的平均分配方式, 但每人信件数量往往不同, 且当今网络高速发展, 信件数量大幅减少, 传统信箱的分配方式无疑造成了空间上的浪费。我们采用细化空间、动态分配的管理方式, 将每一格尺寸缩小, 以每日每户平均来信数量为准, 如有超过, 则另行开辟空闲单元继续存放, 同时, 自动记录所存信件的用户信息;因此信箱整体规模缩小的同时, 支持更多用户的使用, 便于信件的集中管理, 解决传统信箱分散、难管理的问题。
2.4存储阵列设计。系统用存储阵列来存储信件, 当中按行列分布了多个存储单元, 每个单元由两部分空间组成, 一部分存放信件, 称为存储板, 另一部分作为行运送轨道的一部分, 排列在存储板的正上方。图1是系统的模型示意图, 根据它可以进一步说明如何实现信件的存储。
存储板和滑台的形状是相互耦合的, 它们即能够托载信件又能相互通过来实现信件的抬起和放下。这里以存储信件为例, 说明其具体过程, 过程分为5步: (1) 信件被放置在存/取信口的滑台上, 竖直滑轨带动水平滑轨和滑台通过运送通道向下移动到目标行; (2) 水平滑轨带动滑台通过行运输轨道来到目标存储板上方; (3) 确保到位后, 竖直滑轨再次下移, 滑台穿过存储板, 将信件放置到了存储板上; (4) 滑轨带动滑台回到存/取信口。这样, 经过两组滑轨的轮流操作, 就完成了一次存信操作, 并开始等待下一次操作。同理可知, 取出信件的过程正好为该过程的逆操作, 这里不再赘述。
三、控制系统
3.1硬件构成。本系统的主控芯片为STM32F103VE单片机, 内置IIC、SPI总线接口和512K闪存等, 属于ARM v7-M里的Cortex-M3系列。硬件部分还包括触摸屏模块、实时时钟模块、存储器模块、电机配置模块、电源模块、网络接口等。
触摸屏采用7寸TFT电阻式触摸屏, 通过SPI1接口与单片机连接, 由恒流源芯片PT4101为触摸屏提供LCD背光源。
实时时钟模块采用DS1302芯片, 通过IIC2接口接入单片机, 为系统提供时间参考, 实现定时提醒功能。
存储器采用SST25VF016B 2M FLASH, 用于存放信件存储信息和用户账号信息等。
电机配置模块主要由步进电机驱动器、继电器和三极管组成, 用于片选不同的电机驱动器, 并对其控制端口进行配置, 以实现对电机的控制。
网络接口用于接入网络, 将信箱内的信息实上传到网络上, 供用户查看是否有信、修改密码等, 也方便管理员管理和修改信息。
3.2μC/OS-II。μC/OS-II的任务主要包括两部分, 时钟管理与任务调度。操作系统会以定时中断服务程序的型式调用时钟节拍函数, 实现对系统时钟的管理。当新的时钟节拍到来时, 系统判断各任务的优先级, 并按照优先级高低将任务排入就绪队列中。若当前最高优先级任务满足执行条件, 则直接运行, 直到需要某种临界资源时, 任务会主动请求挂起, 这时系统会调度就绪队列中下一优先级的任务, 使其获得执行权。
3.3账号管理。所有使用者都有账号和密码, 作为操作权限的唯一凭据。账号数量可以根据用户数目自由添加或删减, 分配灵活。账号的类型有三种, 即用户账号、管理员账号和投递账号, 它们具有不同的操作权限。当输入密码错误时, 系统不会响应任何要求, 因此可以有效杜绝信件丢失和垃圾广告进入信箱占用空间等现象。
3.4提醒功能。当系统收到来信时, 系统会自动向网络更新信息, 主显示屏会滚动显示收到来信的用户账号。邮递员将信件放入信箱时, 系统会读取当前日期, 并计算出一个提醒日期, 作为该信件的信息存储在存储器中。同时, 系统会定期检查当前日期是否超过所存信件的提醒日期, 若超过, 会发送信息至网络和显示屏, 要求用户及时取走信件, 若用户仍长期没有取信, 系统会通知管理员与用户联系。
四、总结
该方案是针对目前信箱结构上的一系列问题, 提出的一种智能化、自动化解决方案, 旨在提高资源利用率、保障信件安全和实时等。但由于缺乏实际使用中的统计数据, 因此仍可能存在一些问题, 需要进一步研究。
参考文献
[1]桂欣.基于ARM的无刷直流电机控制系统设计[J].信息系统工程, 2012 (3) :33-34, 36.
STM32单片机 篇5
关键词:红外传感器;闭环控制;避障智能小车
中图分类号:TP242 文献标识码:A 文章编号:1674-7712 (2012) 18-0001-02
随着电子技术和智能控制技术的发展,智能车已经成为自动控制领域内的一个研究热点。本文研究的智能小车可以利用传感器自动获取目标道路信息,同时还能自动避开障碍物。
一、总体设计
为了让小车精确快速的通过赛道,我们设计了整个小车的外形(图1),使小车尽量的小并且轻。所以我们选用了玻璃纤维板作为底盘,并且只使用了两个电机,用差速转弯的方式控制小车行进,并且自行设计了电路板。最大化的减小的车的体积和重量,平衡了车的整体重心。
二、硬件设计
本设计采用ST公司Cortex-M4驱动的32位闪存微处理器STM32F405作为硬件平台,配以电源模块、电机驱动模块、传感器信号输入等相应的外围电路和输入输出接口电路等,构成一套完整的硬件系统(见图2)。
(二)核心微处理器
本系统采用STM32F405作为核心微处理器,这是由ST公司年推出的ARMCortex-M4处理器,是ARM专门开发的最新嵌入式处理器。
在系统中,单片机主要执行以下工作:
1.采集紅外测障传感器信号,获取赛道路况信息;
2.采集编码器脉冲数,进行速度PID环的运算;
3.输出所需的左右轮PWM。
(三)电机驱动模块
本系统采用H桥集成芯片ZXMHC3F381N8作为电机驱动芯片,该芯片由4个MOS管集成而成,能满足系统电机的工作转矩和转速。
本智能小车中采用脉宽调制方式(即PWM,PulseWidth Modulation)来调整电机的转速和转向。脉宽调制是通过改变发出的脉冲宽度来调节输入到电机的平均电压,也就是单片机提供给电机的信号是方波,通过不同方波的平均电压不同来改变电机转速。
(四)红外测障传感器
红外测障传感器(图4)连接到主控制板板数字输入口上。通过M3螺丝将传感器模块直接固定在智能小车底盘上。
红外测障传感器在使用过程中,当前方有障碍物时,发射的红外就会被反射回来,红外接收传感器接收到反射光,认为此时传感器前方有障碍物。单片机采集到此信号后,控制小车运动。
通过调节红外测障传感器上的电位器来改变其检测距离。当顺时针旋转电位器时,红外发射变强,检测距离变远;当逆时针旋转电位器时,红外发射变弱,检测距离变近。
在使用中,红外测障传感器对于不同颜色与粗糙程度的障碍物,使用中其检测距离不一样。当障碍物颜色是黑色或深色时,会吸收大部分红外光,只反射回一小部分,有时会使红外接收传感器接收到的红外光强度不够,不足以产生有障碍的信号;当障碍物颜色是白色或浅色时,正好相反。
三、程序设计
系统电机使用闭环控制系统,在采集到编码器的脉冲信号后,进行速度PID闭环的运算。通过定期检测红外测障的数据,获得跑道数据信息后,进行路径规划,输出所需的左右轮的目标速度。加入PID运算。控制轮速以完成小车避障行驶。图5是程序流程图。
其中stateL代表左红外测障传感器状态,若为“1”则表明未检测到左边缘,反之则表明检测到左边缘;stateR代表右红外测障传感器状态,若为“1”则表明未检测到右边缘,反之则表明检测到右边缘;stateM代表中红外测障传感器状态,若为“1”则表明未检测到前边缘,反之则表明检测到前边缘。
在方向控制上,通过左右轮的转速差来控制。左轮较右轮转速快,则控制智能车右转,反之则控制智能车左转。
四、结束语
本文以追求智能车避障行驶稳定性为前提,提出了智能车的整体设计思想,硬件设计,软件设计。在机械结构方面,我们以电脑鼠作为设计思想,设计了轻巧的车体结构。在电路方面,我们以模块形式分类,在最小系统、主板、电机驱动等模块分别设计,经过不断实验,最后决定了我们最终的电路图。在程序方面,我们使用C语言编程,经过不断讨论、改进,终于设计出一套比较通用稳定的智能避障程序。在这套算法中,我们结合路况调整车速,保证在最短时间内避障跑完全程。
参考文献:
[1]卓晴.学做智能车:挑战“飞思卡尔”杯[M].北京:北京航空航天大学出版社,2007.
[2]黄志伟.STM32F32位ARM微控制器应用设计与实践[M].北京:北京航空航天大学出版社,2012.
[3]谭浩强.C程序设计[M].北京:清华大学出版社,2003.
[4]高海宾.AltiumDesigner10从入门到精通[M].北京:机械工业出版社,2012.
STM32单片机 篇6
1 系统硬件总体结构
本设计选择高性价比ARM微处理器STM32作为调速系统的核心控制器[2,3], 系统增加了Flash闪存、同步动态内存SDRAM和键盘、液晶屏LCD等外围功能器件, 选用MC33886芯片作为直流电机驱动, 应用增量式PID控制实现了电机的PWM闭环调速。系统总体结构如图1所示。
从结构上看, 可以认为是一个闭环调速系统。其工作原理为:光电码盘将测得的电机转速信号变成电信号反馈给STM32单片机。单片机系统自行给定转速 (内给定) , 或者从占空比输入电路获得电机给定转速 (外给定) 。系统根据给定的电机转速信号与反馈速度信号比较, 得出偏差, 经过增量式PID运算得出控制变量改变PWM波占空比, 也就是改变了直流电机电枢两端的平均电压, 进而调节的电机的转速, 实现了STM32单片机对直流电机的PWM闭环脉宽调速[4,5,6,7]。
2 调速系统主要硬件设计
2.1 MC33886与STM32接口电路设计
STM32单片机高低逻辑电平与MC33886输入端的IN1、IN2逻辑高低电平参考电压不一致, 需要一个电平转换接口。本设计选用74HC08芯片作为MC33886与STM32的电路接口。74HC08为14引脚DIP和SOP封装, 引脚如图2所示。引脚介绍如下:1A与1B为第一组与门如入端, 1Y为第一组与门输出端。14号引脚是芯片的供电端, 7号为芯片的接地端。其余3组2输入与门不在详述。值得注意的是74HC08为CMOS电路, 输入端引脚不能悬空, 要经过下拉电阻接地。
2.2 电机驱动模块电路设计
飞思卡尔公司推出了一款H桥元件的直流电机驱动芯片 (M C 3 3 8 8 6) 。芯片可连续提供5 A的电流, 驱动负载能力较强。MC33886为20引脚HSOP封装, 通过信号INl和IN2控制MC33886 H桥的输入端, 该芯片的两个输出端6号与15号引脚直接接小功率直流电机两端后就可以控制电机正反转了。由于当直流电机达到一定速度时M C 3 3 8 8 6就过流保护了, 今后可以尝试使用大功率的MOSFET管构建桥型驱动电路, 这样可以使驱动器内阻更小, 电机的加减速性能更加出色。图3所示为MC33886外部电路设计。
2.3 电机转速检测模块电路设计
现在对电机转速测量应用较多的装置为光电码盘。它的基本测速原理为当电机的转轴旋转时进而带动码盘转动, 码盘一周刻有无数夹缝, 当光透过夹缝被接收元件接收, 通过信号调理电路输出一个标准 (脉冲) 信号送入带有计数功能的装置。本设计所用的增量式高线程的光电编码器且与直流电机为一体。其1号端子接电源VCC, 2号与3号端子是脉冲输出端, 4号端子为接地端。其测速模块的与STM32单片机电路连接设计如图4所示。
3 系统软件设计
当把直流电机闭环控制所需的程序编译没有错误, 利用keil4编译环境把程序通过J-LINK下载到STM32单片机。闭合直流电机闭环控制模块的电源开关, 电机开始转动, STM32单片机隔50ms采集电机转速, 增量式PID运算, 调剂PWM波的占空比。不断地调试PID参数, 可以使电机的转速达到给定值。系统的主程序是一个循环程序, 其流程图如图5所示。
其速度控制算法采用增量式PID算法[8,9]。相比于位置式PID算法, 增量式PID算法不容易引起积分饱和, 因此能获得更好的控制效果。
4 结语
本文介绍了一种基于STM32单片机的直流电机调速系统的设计, 采用STM32单片机实现对直流电机的PWM波脉宽调速控制, 不仅提高了控制器的性价比, 而且具有稳定性好、精度高和响应速度快等优点。对未来管道机器人的研究有一定的实用价值。
摘要:根据直流电机调速的相关知识, 以及PWM基本原理和实现方法, 本文介绍了一种基于单片机的直流电机调速系统, 选择STM32单片机作为系统的控制核心, 利用软件产生PWM信号, 采用增量式PID算法控制直流电机的速度调节, 提高了调速系统的精度, 增强了对直流电机速度的可控性, 对输油管道机器人的研究有一定的参考价值。
关键词:STM32单片机,直流电机,调速
参考文献
[1]李发海, 朱东起.电机学[M].北京:科学出版社, 2001.
[2]意法半导体STM32系列STM32F103 32位微控制器[J].今日电子, 2008 (2) :61.
[3]STM32F103数据手册.2001:18 (1) :44-45.
[4]贾玉瑛, 王臣.基于单片机控制的PWM直流调速系统[J].包头钢铁学院, 2005, 2 (12) :334-337.
[5]王苏.直流电机PWM调速研究及单片机控制实现[J].机电工程技术, 2008, 37 (11) :82-84.
[6]陈伯时.电力拖动自动控制系统[M].机械工业出版社, 2004.
[7]秦继荣等.现代直流伺服控制技术及其系统设计[M].北京:机械工业出版社, 1993, 143-149.
[8]王晓明.电动机的单片机控制[M].北京:北京航空航天大学出版社, 2003.
STM32单片机 篇7
1 硬件设计
该数码相框以基于Cortex-M3内核的单片机STM32F103VET6为核心,外围电路包括一个TFT液晶屏,一个SD卡插座,以及2个按键,电源供电由5V直流,通过ASM1117-3.3芯片转换为单片机所需的3.3V。
基于Cortex-M3内核的单片机STM32F103VET6的存储程序控制,从SD卡读取图片,解码后输出到TFT-LCD上显示,同时通过按键可以切换到时间模式。
1.1 电源电路设计
电源电路采用的ASM1117-3.3V电压转换芯片,将5V直流输入直接转换为3.3V。具体电路图如M下1。
1.2 SD卡电路设计
Micro SD卡是一种极细小的快闪存储器卡,它被广泛地应用于便携式装置上,例如数码相机、个人数码助理(PDA)和多媒体播放器等。本次我们采用Micro SD卡作为存储介质。Micro SD卡支持两种可选的通信协议,分别为SD模式和SPI模式,MCU可以选择以上任意一种模式同Micro SD卡通信,Micro SD卡模式允许4线的高速数据传输,SPI模式允许简单的通过SPI接口来和Micro SD卡通信,这种模式同SD卡模式相比就是丧失了速度。本次硬件电路板使用的是SD卡模式来读写SD卡。
1.3 液晶显示电路设计
Thin Film Transistor(薄膜场效应晶体管),是指液晶显示器上的每一液晶象素点都是由集成在其后的薄膜晶体管来驱动。从而可以做到高速度、高亮度、高对比度显示屏幕信息,TFT-LCD(薄膜晶体管液晶显示器)是多数液晶显示器的一种。
本设计采用4.3寸屏,分辨率480X X 272,64K色,数据接口16位,背光驱动采用白光驱动器提供背光用的横流源,使背光更加均匀,背光明暗控制采用TTL电平或者PWM模式控制。屏上带电阻式触摸屏,模块板上带SPI控制方式的触摸屏控制电路。具体电路如下。
1.4 单片机控制电路
STM32系列闪存微控制器是意法半导体公司(ST)基于ARM公司具有突破性的Cortex-M3内核的处理器,该处理器是专门设计于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域的要求。此次设计采用的具体型号是STM32F103VET6,具体电路如下图所示。
2 软件设计
本设计需要用到FAT(FAT16/32)文件系统来读取SD卡上的字库和UNICODE到GBK的转换码表到W25X16部分,因此要重点介绍FAT文件系统。FAT文件系统本身比较复杂,所以这里只简单介绍一下。
常用的文件系统有FAT12/16/32等,FAT12是最古老的文件系统,只能管理8M左右的空间,现在基本淘汰了。FAT16则可以管理2G的空间(通过特殊处理也能管理2G以上的空间),而FAT32则能管理到2TB(2048GB)的空间。FAT32较FAT16的优势还在于FAT32采用了更小的簇,可以更有效的保存信息,而不会造成较多的浪费。
单片机在上电复位后首先会进行各个模块的初始化,将系统时钟配置为72MHz,对Micro SD卡和TFT液晶显示器的状态进行初始化,然后开始图片显示。软件流程图如下。
在初始化成功后调用FAT32文件系统计算Micro SD卡的总存储容量并查询到符合解码的文件个数,在液晶屏上显示出文件名、文件个数以及Micro SD卡的总存储容量,之后进行正常的图片显示,在外部8MHz晶振作用下每张图片的刷新时间大概是2秒,每两张图片直接间隔1秒,之后循环显示。
3 小结
本设计从硬件和软件两方面介绍了基于STM32的数码相框的制作。硬件上解决了STM32单片机与Micro SD卡和TFT液晶的连接,软件方面主要解决了Micro SD的读取、FAT32文件系统的应用、TFT液晶屏的驱动以及图片格式的解码,本设计还有不足以及需要改进的地方,将在以后的工作中进行改进。
参考文献
[1]薛莲,张国权.基于AVR单片机的数码相框设计[J].信息通信,2013.
STM32单片机 篇8
四旋翼飞行器体积小、重量轻,与载人飞机相比成本很低,可广泛应用在交通检测、园林维护、灾区搜救等场合,目前在国内外正处于热门研究中[1,2,3]。但四旋翼飞行器是一个非线性、多变量、高度耦合、欠驱动系统(6个自由度,4个输入量),控制系统较为复杂,系统抗干扰能力差。只有采用了合适的控制方案才能够实现平稳的飞行,这就需要对飞行器进行力学和运动学上的分析并建立相对应的数学模型,设计单片机控制电路及软件控制系统等,实现对飞行器的稳定控制。
1 四旋翼飞行器数学模型建立
为简化分析,假设以下条件成立:
(1)机体坐标系的原点为飞行器的质心,并且与飞行器几何中心重合;
(2)只考虑螺旋桨产生的气流,而空气流动速度及空气阻力忽略不计;
(3)飞行器机体与螺旋桨均为刚体结构,机体的几何构造及质量对称;
(4)螺旋桨旋转时产生的反扭矩与转速的平方成正比,螺旋桨产生的升力与转速的平方成正比。
根据以上条件,设F为飞行器受到的外力和,m为飞行器质量,V为飞行速度,M为飞行器所受力矩之和,H是飞行器相对于导航坐标系的相对动量矩,受力分析如图1所示。根据牛顿-欧拉方程对四旋翼飞行器平移运动与旋转运动建立模型[4,5,6,7]。
设螺旋桨的转速为Ωn,根据假设条件(4)得出升力为bΩn2,其中b为升力系数,则总升力为:
在机体坐标系中飞行器的受力向量为FB=[0 0 U1],导航坐标系E中的受力向量FE为:
在导航坐标系ΓE=[x y z]T下,沿x、y、z三个轴向上受到的阻力系数为Kx、Ky、Kz,根据牛顿第二定律建立沿导航坐标系的三轴受力方程式:
螺旋桨转动过程中产生反扭矩的大小为Qn=dΩn2,d为反扭矩系数。定义U1为垂直总升力,U2为横滚力矩,U3为俯仰力矩,U4为偏航力矩,旋翼中心到飞行器质心的距离为l,则有:
根据角动量守恒定律,设绕x、y、z三个轴上的受到的力矩分别为Mφ、Mθ、Mψ,所受阻力系数分别为Kxφ、Kyθ、Kzψ,根据假设条件(1)和(3),将惯性张量定义为对角阵I:
根据欧拉方程则有三轴力矩平衡方程式:
由于姿态稳定控制不需对位置和高度进行控制,只需考虑角度控制即可,稳定控制时姿态变化较小,可忽略空气阻力的影响,这样得到简化后的动力学模型为:
从以上公式可以看出,在四旋翼飞行器的姿态控制模型中,对任一个角度的控制均可采用PID控制器对其进行控制。
2 硬件电路设计
2.1 硬件系统主要组成
系统硬件主要包括飞行架构、微控制器最小系统、无线通信系统、动力系统、惯性测量单元、电源等几个部分。其中飞行架构是其他几部分的载体,微控制器最小系统用于数据融合、姿态解算与调节,控制协调各模块的工作。无线通信系统用于遥控飞行器和接收数据;动力系统由驱动器、电机、螺旋桨组成,为飞行器提供升力和推动力;惯性测量及系统为飞行器提供姿态和高度等信息,是飞行器系统的重要组成部分。
2.2 主要电路原理图
系统主要电路原理图如图2所示。采用STM32F103-C8T6高速单片机作为主控制单元,MPU6050和HMC5883L组成惯性测量及姿态检测单元,实现对三轴的加速度、三轴陀螺仪、三轴磁场方向的检测,输出原始数据给微控制器,进行融合姿态解算后得到横滚角、俯仰角、偏航角。采用空心杯直流电机,使用PWM进行调速。驱动电路由N沟道的场效应管形成的开关电路实现,选择漏源电阻较小的场效应管,防止电机输入电压变小造成电机转速的范围变窄,便于对电机转速调节的控制。
3 软件系统设计
3.1 姿态解算与卡尔曼滤波[8,9,10,11,12]
飞行器在运行过程中,CPU通过传感器MPU6050内部的三轴加速度传感器、三轴陀螺仪来实时采集当前各方向姿态数据,通过解算后得到三个方向的角度、角速度值,然后调节各电机转速,使其达到期望姿态。加速度传感器用来测量x、y、z三个方向的加速度值,然后与重力加速度比较即可算出三个方向的角度值,但是存在一定误差。三轴陀螺仪传感器用来测量x、y、z三个方向角速度,乘以时间即为角度。
通过陀螺仪计算出来的角度存在一定的误差,多次累加以后累积误差越来越大,最终导致计算出的角度与实际角度相差很大。本文的解决方法是把加速度计读出的角度与陀螺仪计算出的角度相结合,通过卡尔曼滤波计算出更为准确的角度值。
3.2 四旋翼飞行器PID控制器设计[13,14,15]
通过传感器准确获取角度、角速度数据后,再与期望姿态角进行对比,实现对飞行器姿态的调节控制。控制系统采用位置式PID控制器进行调节,四旋翼飞行器主要包括横滚角、俯仰角、偏航角3种姿态,只有对3个姿态角可控,才能实现对四旋翼飞行器的悬停、前进、后退、左转、右转等控制,因此需设计三路串级PID控制器,其框图如图3所示。
在设计中,外环采用角度环进行PI控制,内环采用角速度环进行D控制。设置这样的串级PID可以使飞行器在大角度偏差时修正速度快,小角度偏差时修正速度慢。外环期望角度为设定值,如悬停的期望值为0°,而实际角度值由卡尔曼滤波后的角度数据提供。外环PI控制器的输出值作为内环D控制器的期望值,内环角速度实际值由传感器MPU6050内部的陀螺仪提供。三路PID控制器的输出分别为roll_out、pitch_out、yaw_out,分别以PWM的形式输出给4个电机驱动电路,每个电机PWM线性组合如下:
Y轴前端电机:Throttle-roll_out-yaw_out;
Y轴后端电机:Throttle+pitch_out-yaw_out;
X轴右端电机:Throttle-roll_out+yaw_out;
X轴左端电机:Throttle+roll_out+yaw_out。
其中Throttle为电机输入固定值,也称油门。为保证飞行器稳定,内环控制器的采样频率为200 Hz,外环控制器采样频率50 Hz即可。为保证采样时间间隔均匀,PID控制器采样周期由高优先级定时器中断提供。串级PID调节、卡尔曼滤波轴波形图如图4所示。由图中可以看出飞行器在受到环境干扰时,通过串级PID调节可迅速让机身恢复至平衡位置。恢复时间很短,基本无振荡现象,说明飞行器在串级PID调节下具有较强的抗干扰能力,验证了PID调节系统设计的可靠性。
4 系统测试
4.1 姿态角测试
四旋翼飞行器采集到加速度计和陀螺仪的数据后,经过数据融合、卡尔曼滤波将两种数据融合在一起计算出较为精确的姿态角数据,再将数据通过串口发送到由匿名科创提供的上位机软件,将三轴姿态角用3D效果图直观显示出来。其中横滚角姿态解算3D效果如图5所示,由图中可以看出系统响应稳定、姿态平稳,说明系统能很好地实现这些姿态控制。
4.2 平衡飞行测试
将飞行器半固定在水平杆上调试内外环PID各项系数,在调试俯仰这一路的PID控制器时,先将Ki和Kp设为零,Kp增大到控制回路的输出出现临界振荡较为合适,当选取到12左右时,飞行器在上升过程中出现上下摆动的不稳定现象,通过设置Kd参数抵消比例作用调节时的过度反应和过冲干扰,使飞行器系统在上升时能够趋于稳定飞行,Kd取0.05左右就可以满足要求,为消除静态误差,Ki参数可以选取0.02左右。经反复调试达到稳定状态,在室内可使飞行器平稳悬停在空中,通过调节俯仰角的大小可让飞行器在室外水平稳定向前飞行。
5 结论
STM32单片机 篇9
1 STM32微处理器的性能概述
近年来, STM32微处理器得到了广泛的使用。作为一款32位微处理器, STM32的性能较为强大, 并且运行速度也较快, 但是却只需要耗费较低的功耗。而伴随着相关技术的发展, STM32微处理器的各方面性能也在不断提升, 从而被更多的人用来当做是嵌入式MCU使用。就目前来看, 在室内环境监测方面, STM32处理器也同样得到了应用。所以, 该微处理器具有较强的系统扩展功能, 内含的12位AD转换器使其拥有了实现高精度数模转换功能[1]。而正是由于STM32单片机的控制功能较为强大, 所以其在室内环境监测方面也得到了较好的运用。
2 STM32单片机在室内环境监测系统中的运用
2.1 基于STM32单片机的室内环境监测系统
从系统构成上来看, 基于STM32的室内环境监测系统应该由温湿度传感部分、空气质量传感部分和反馈电路部分等多个部分构成。在主控制器的选择方面, 使用的是STM32F103VBT6微处理器。同时, 系统需要使用多点测量的单总线结构DS18B20和DS2438进行温湿度和二氧化碳浓度的测量, 并且使用半导体气体传感器进行室内空气质量的测量。而通过将测量的模拟信号转化成数字信号后, 系统将利用单总线网络将数据传输到STM32控制器中。最终, 经过控制器的处理, 系统会将数据和时间显示在LCD上。从数据传输角度来看, DS2438具有全球唯一的ID, 所以控制器可以精确进行芯片传出信息的识别。而系统信号的传输率可以达到110kbit/s, 并且最远可以传输至600m以上的距离。在获得现场环境数据后, 控制系统可以与CAN、RS-232接口与计算机连接, 从而为上位机提供环境监测数据[2]。而在完成数据的处理后, 控制器也能将数据按照设定的时间间隔存储在SD卡中, 从而方便用户的查询。
2.2 STM32单片机在系统硬件设计中的运用
在设计系统的传感部分时, 使用DS2438内部传感器就能实现对室内环境温度的测量, 并且进行温度值的输出。而湿度传感器需要使用HIH3610, 其内部含有信号处理功能电路, 可以顺利将湿度值转化成电容值, 并且最终将数据以线性电压值输出。在测量室内环境的湿度时, 需要利用DS2438进行温度补偿。具体来讲, 就是利用其内部电压ADC进行湿度传感器输出的线性电压值的补偿。而在补偿的过程中, 需要完成多路开关的切换, 以便获取湿度测量值和测量时的单总线电压值[3]。此外, 利用DS2438芯片内部的EEPROM, 可以完成对湿度传感器的标定技术参数的存储, 从而合理实现对湿度传感器的温度补偿。
在设计系统硬件时, 还要使用半导体气体传感器完成对室内各种空气污染源的测量, 以便将室内空气质量精确反映出来。而二氧化锡半导体气体传感器可以实现对二氧化碳、甲醛、烟雾和甲苯等多种有害气体的精确测量, 并且能够在极短的时间里做出响应。此外, 使用该传感器只需要消耗较低的功耗, 并且具有较好的感应特性, 因此可以在室内环境监测系统设计中得到应用。
此外, 系统硬件设计部分还应该包含反馈电路的设计。在系统测量的二氧化碳浓度或温湿度值超标时, 控制器将通过输出控制信号进行继电器的控制, 从而使系统利用继电器完成对空气参数的调节。
2.3 STM32单片机在系统软件设计中的运用
从系统软件设计方面来看, 为了满足单总线器件的操作时序要求, 需要使用C语言进行DS2438和DS18B20的操作程序的编写。而系统的LCD显示程序、通信程序以及数据存储程序同样也需要使用C语言编写。在系统运行的过程中, 采集子程序将能完成对传感器输出电压值的采集。在此基础上, 系统转换程序将完成对采集数值的转换, 从而使控制器得到室内环境监测值, 并利用串口通信屏将数据显示出来。而系统利用温度补偿程序采取的温度值将成为室内环境的温度值, 测量所得的温度值则可以成为程序得出的温度参考值[4]。此外, 系统使用了Fame View监控组态软件平台进行了监控软件的开发, 并且利用该平台完成了计算机监测界面的设计。
3 结语
总而言之, 在室内环境监测系统设计中运用STM32单片机, 可以完成对室内温湿度和空气质量的精确监测, 从而为人们创造良好室内环境提供科学的数据依据。而该系统的体积相对较小, 更加方便人们携带, 所以将获得一定的实用价值和应用前景。
摘要:随着物质生活水平的提高, 人们对室内环境也有了更高的要求, 为此, 需要进行室内环境监测系统的设计, 以便为室内环境建设提供一定的科学依据。而利用STM32单片机进行室内环境监测系统的设计, 能够有效实现对室内环境温湿度和空气质量的监测, 打造一个良好的室内环境, 从而更好的满足人们对室内环境的监测要求, 使人们的身心健康得到保障。
关键词:STM32单片机,室内环境监测系统,运用
参考文献
[1]宋华鲁, 闫银发, 张世福, 等.基于STM32和Free RTOS的嵌入式太阳能干燥实时监测和控制系统设计[J].现代电子技术, 2013, 23:103-106+109.
[2]云中华, 李勇峰, 刘洪春, 等.基于STM32微控制器的家居环境监测系统设计与研究[J].自动化与仪器仪表, 2015, 10:227-229.
[3]胡四海, 李志华.基于STM32和Lab VIEW的无线温湿度检测系统[J].中国测试, 2015, 05:99-102.
STM32单片机 篇10
针对现阶段三叶桨四旋翼飞行器平衡难以控制的不足,该文基于STM32系统采用了STM32F103CBT6作为控制器,采用了四元数转欧拉角算法与PID调节器相结合的处理方式,实现了角速度与加速度到角度的转换,达到了间接控制三叶桨平衡的效果[5,6,7]。该飞行器的总体设计要求为:
1) 利用四元数和欧拉角的算法实现陀螺仪数据的融合;
2) 利用PID算法的调节实现四旋翼飞行器的平稳飞行。
1 总体设计方案
四旋翼飞行器分X型和+型两种,本设计选用的X型。其总体框架由机架、陀螺仪、MCU、电源,四部分构成,其中机架中由电机、桨翼、电调这三部分组成,本设计采用一体化的设计思路,就是机身和处理器板作为一个整体,四旋翼飞行器的处理器使用STM32F103CBT6,传感器使用L3G4200d,使用IIC总线的方式与处理器连接。通过上位机利用自己定义的协议来完成小型四旋翼飞行器的姿态显示和控制。采用无刷电机和两对三叶正反桨,电池使用11.8V的锂电池。整个系统的电源控制部分采用662K和LM2678稳压芯片,这样可以确保供电的稳定性,保证系统稳定可靠的运行。
STM32单片机主要负责传感器数据的获取,原始数据滤波,数据融合,四元数姿态解算算法,PID闭环控制算法。遥控信号的解码用来接收和发送数据和命令。系统总体设计框图如图1所示。
2系统硬件设计
本飞行控制系统主要实现人的遥控操作及自动增稳和定高等功能。四旋翼飞行器通过接收机接收到的遥控信号完成操作者的相应的遥控操作,同时具有感知飞行姿态并自动调整的功能。整个控制系统包括电源功能模块、遥控接收模块、陀螺仪模块、加速度计传感模块、电机驱动模块、MCU等部分。该控制系统的原理图如图2所示。
3 系统软件设计
3.1 主程序设计
本控制系统通过接收遥控器的信号和采集陀螺仪,加速度计的数据来实现对飞行器的姿态控制,对飞控采用PID调节来提高飞行器的稳定性和可靠性。系统对STM32时钟初始化,STM32单片机的内部时钟完全能很好的实现对四旋翼飞行器的控制,接着初始化相应的定时器、串口、陀螺仪、加速度计等硬件设备。通过接收遥控器信号和采集陀螺仪,加速度计的数据,通过数据处理子程序计算旋翼控制量,并产生相应PWM占空比来实现对飞控姿态的控制。
3.3 四元数计算欧拉角的实现
本设计基于互补滤波的思想上完成的四元数算法,其核心思路为利用加速度测得的重力向量与估计姿态得到重力向量的误差来校正陀螺仪积分误差,然后利用校正后的陀螺仪积分得到姿态角。
3.4 PID 控制
由于四旋翼飞行器独特的机械结构,即结构上的对称设计,使得四轴在俯仰角的控制欲横滚角的控制上有这近乎相同的控制特性,且两者相对独立。四轴飞行器的俯仰,横滚,偏航,升降可以通过四个输入量来控制。通过设定一个期望角度,调整电机转速,使得测得的姿态角稳定在期望角。控制律的设计主要采用是闭环控制。以姿态角做为被控制量,采用经典的PID控制算法。
4 系统测试结果及分析
4.1 姿态角测试
观察上位机中的界面,当界面的姿态与四轴机体能够保持一致变化时说明姿态解算良好。由图3说明四元数算法解算后的姿态角反应快,噪声小,足以满足控制要求。
4.2 四旋翼飞行器飞行高度测试
通过反复发飞行实验测试,本飞行器飞行高度在0-50m范围之内。
4.3 四旋翼飞行器电机转速测试
通过频闪仪测试飞机刚起飞和油门最大情况时的无刷电机转速。无刷电机是四轴的主流,它力气大,耐用。根据其型号的不同其相应的转速也不同,常见的型号为2212 ,1000KV电机。其中22代表电机转子的直径,12代表转子的高度,1000KV代表电压每增加1V电机空转时每分钟增加000转,本设计就是选用的这种电机。转速如表1,表2所示。
5 结论