天津工业大学本科毕业论文
第四章 软件设计
4.1软件总体设计
软件部分采用MDK5进行设计,FLYMCU一键下载。软件模块包括:main、delay、usart、adc、key、timer、led等。
整个系统包括主控MCU两个信号采集点和LED输出。主控MCU实现对两个信号采集点的控制及照明输出的控制,对于信号的采集涉及到ADC;而对于LED输出涉及到PWM、TIM。系统主程序流程图如图4-1。
(1)上电之后,要等待按键按下,如果key1按下则LED完全打开,然后不断判断接下来是否有按键按下,直到再次有按键按下;如果key2按下则进入自动控制模式(2);如果按下key3则依旧保持LED关闭状态。
(2)进入自动控制模式,首先关闭LED,然后判断是否有key1按下,如果是,则LED完全打开返回(1);如果没有,则进入下一步(3)获取外界环境照明信号和人体活动红外信号。
(3)判断是否有key1按下,如果是,则LED完全打开返回(1);如果没有,则进入下一步。
(4)判断lsens是否大于2000并且红外信号输入为1,如果不是则回到(2)中继续获取信号量;如果是则进入(5)。
(5)判断是否lsens是否小于3900,如果小于则开启小夜灯模式并延时50ms;如果不大于则LED完全开启并延时50ms;然后获取人体活动红外信号,返回(4)但不需要再判断lsens。当不在满足条件时,首先关闭LED。
其中有两部分比较关键,首先实现将环境照明强度转化为电压值并且将红外感应转化为高低电平,其次将电压值和高低电平经由ADC转化为数字值并在其中进行不间断测量取平均值,以便减少误操作。
16
天津工业大学本科毕业论文 开始判断按键KEY2进入自动控制模式关闭LEDKEY1LED完全打开Y是否有KEY1按下N获取ADC1通道1光敏电阻ADC值与热释电红外传感器返回值Y是否有KEY1按下N是否有人且Lsens>2000YLED开启小夜灯模式然后延时50msNLsens>=3900YLED完全开启然后延时50ms获取热释电红外传感器返回值 图4-1 系统主程序流程图 主程序具体如下:
int main(void)
{
LED2_OFF;
//关闭LED2
TIM3_PWM_Init(899,0); //不分频。PWM频率=72000000/900=80Khz TIM_SetCompare2(TIM3,0);//设置TIM3初始值为0
while(1) {
17
//判断按键选择模式
天津工业大学本科毕业论文
if(KEY1==0) if(KEY2==0) if(KEY3==0) key=KEY1_PRES; key=KEY2_PRES; key=KEY3_PRES; //开启模式1,LED常亮模式 //开启模式2,进入自动控制模式 if(key==KEY1_PRES) TIM_SetCompare2(TIM3,899); //LED完全开启模式 else if(key==KEY2_PRES) } } 18
{ TIM_SetCompare2(TIM3,0); //关闭LED while((key!=KEY1_PRES)&&(key!=KEY3_PRES) { lsens=Get_Adc_Average(ADC_Channel_1,10); //获取ADC1通道1光敏电阻ADC值 infrared=Get_Infrared(60); //获取热释电红外传感器返回值 //判断是否有KEY1按下 //判断是否有KEY1按下 if(KEY1==0)key=KEY1_PRES; if(KEY3==0)key=KEY3_PRES; } while((lsens>2000)&&(infrared==1)) { //光照条件不好且有人LED完全开启 TIM_SetCompare2(TIM3,899); delay_ms(50); } else { } TIM_SetCompare2(TIM3,0);//无人时恢复LED关闭状态 led3pwmval=50; TIM_SetCompare2(TIM3,led3pwmval); delay_ms(50); } infrared=Get_Infrared(10); //光线昏暗且有人LED开启小夜灯模式 if(lsens>=3900) { else if(key==KEY3_PRES) TIM_SetCompare2(TIM3,0); 天津工业大学本科毕业论文
4.2软件介绍 4.2.1 MDK5
MDK 源自德国的 KEIL 公司,是 RealView MDK 的简称。目前最新版本为:MDK5.14,这个软件非常好,该版本使用 uVision5 IDE 集成开发环境非常适合本课题设计,以前的版本的开发项目也可以拿来在这做,只是有些东西要手动自己加了。MDK5 由两个部分组成:MDK Core 和 Software Packs。
Keil公司开发的ARM开发工具MDK,这个软件也适合其他关于ARM的软件开发,是用来开发基于ARM核的系列微控制器的嵌入式应用程序。它适合各式各样的开发者使用,只要是开发嵌入式软件的都可以。MDK包含了很多的组件,支持所有基于ARM的设备,真的是非常适合各类开发者使用,能帮助工程师更好的完成项目。
4.2.2 FLYMCU
采用flymcu进行一键下载。一键下载电路的具体实现过程:
(1)flymcu 控制 DTR 输出低电平DTR_N 输出高RTS 置高, RTS_N 输出低,如此Q2、Q3 都导通了,BOOT0 被拉高,实现设置 BOOT0 为 1, MCU的复位脚被拉低,实现复位。
(2)延时 100ms 后,flymcu 控制 DTR为高电平DTR_N输出低电平,RTS维持高电平RTS_N继续为低电平,就在这个时候时STM32F1 的复位引脚, Q2 不再导通,变为高电平,STM32F1 结束复位, BOOT0 还是维持为 1,这样就进入了 ISP 模式,接下来 flymcu开始连接MCU,下载代码了。
4.3按键判断
KEY_Init是用来初始化按键输入的 IO 口的。首先使能GPIOE 时钟,然后设置PE4、PE3、PE2分别对应KEY1、KEY2、KEY3,端口模式为输入上拉模式,最后初始化对应端口。本电路的按键按不能连续一直按着,就算按着也不会多次触发,但是对于本实验来说再合适不过了,因为我们在本设计中并不需要长按,所以并不受影响。当检测到KEY1按下时,将KEY1_PRES赋给key;当检测到KEY2按下时,将KEY2_PRES赋给key;当检测到KEY3按下时,将KEY3_PRES赋给key。再配合if条件语句,从而达到KEY1控制开启模式1 LED常亮,KEY2控制开启模式2进入自动控制模式,KEY3控制开启模式3进入关闭LED模式。
19
天津工业大学本科毕业论文
4.4 ADC信号采集
STM32F103 系列最少都拥有 2 个 ADC,我们选择的 STM32F103ZET 包含有 3 个 ADC。 STM32 的 ADC的转换速率最大也就到了为 1Mhz,换算成转换时间便是 1us了,最好不要让 ADC 的时钟超过 14M,如果超过的话会导致准确度大大下降。这里我们采用ADC1。流程图如图4-2所示。 当KEY2按下时,我们就需要利用ADC1通道1和通道2分别采集光敏传感器和热释电红外传感器的信号了。 ADC信号采集涉及到两个函数Adc_Init、Get_Adc。Adc_Init用来初始化ADC信号采集IO口。 开始开启 PA 口时钟和 ADC1 时钟,设置 PA1 为模拟输入使能 ADC 并校准复位 ADC1,同时设置 ADC1 分频因子 读取 ADC 值初始化 ADC1 参数,设置 ADC1 的工作模式以及规则序列的相关信息结束图4-2 ADC采样流程图 (1) 使能 PORTA 的时钟和 ADC1 时钟。 (2) 设置 PA1 为模拟输入开启,复位 ADC1。 (3) 将 ADC1 的全部寄存器重设为缺省值之后通过 RCC_CFGR 设置 ADC1 的分频因子。分频因子要确保 ADC1 的时钟(ADCCLK) 不要超过 14Mhz。 这里设置分频因子为 6,时钟为 72M/6=12MHz。 (4) 进行 ADC1 的模式配置了,设置单次转换模式、软件触发方式、数据对齐方式为右对齐。设置规则序列中通道数为 1。 (5) 使能 AD 转换器,执行复位校准和 AD 校准 (6) 利用Get_Adc设置规则序列 1 里面的通道,采样顺序,通道采样周期设置239.5。 (7) 启动 ADC 转换。 (8) 转换结束之后,读取 ADC1 转换结果值。 20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于stm32-M3智能照明毕业设计论文 - 图文(7)在线全文阅读。
相关推荐: