版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.3流水灯之定时器延时(中断方式)能力目标:
在4.2节的基础上,进一步理解单片机定时器中断的触发原理,掌握单片机定时器延时中断程序的编制方法。任务要求:仿真电路如图所示,任务要求同3.3,即实现八个LED的流水灯效果,要求延时必须通过定时器中断方式实现。4.3.1定时器中断STM32的定时器均具备中断功能,中断发生的时刻为定时器溢出的时刻,即定时器一个计数周期完成的时刻。任务要求:仿真电路如图所示,任务要求同3.3,即实现八个LED的流水灯效果,要求延时必须通过定时器中断方式实现。4.3.2任务程序的编写首先是工程的图形化配置,将PC0~PC7全部设为“GPIO_Output”模式,计算并设定定时器参数,如右图所示。打开定时器中断功能,在定时器配置页面中,选择“NVICSettings”(NVIC设定)页,将“TIM3globalinterrupt”(定时器3全局中断)打勾,如图所示。本次任务需要用到的新的API函数有:
①定时器启动函数(开中断)HAL_TIM_Base_Start_IT例程://运行定时器TIM3并开启对应中断if(HAL_TIM_Base_Start_IT(&htim3)!=HAL_OK){Error_Handler();}②定时器溢出中断回调函数HAL_TIM_PeriodElapsedCallback例程:(现场操作演示...)//TIM3溢出中断回调voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htim==&htim3){…}}技能训练(选做):修改任务3.1程序,将延时程序由软件延时改为定时器溢出中断方式。Tobecontinued...4.4长短按键能力目标:
理解长短按键功能实现的原理,能利用软件延时以及定时器中断技术实现长短按键程序的编写。任务要求:仿真电路如图所示,若正常按一下BTN1按键时D1点亮,若按住BTN1按键超过1秒则D2点亮,在D1或D2点亮时按一下BTN2按键则所有LED都熄灭。4.4.1长短按键的用途和设计思路(1)长短按键的用途有些电子产品由于体积限制,按键个数不能太多,需要通过一个按键响应两个甚至更多个不同的事件,比如可以通过按键时间的不同设定其响应不同的事件,我们不妨称这种按键为“长短按键”。(2)长短按键的设计思路“长短按键”实现的方法有很多,本节为读者介绍一种比较简单的方法,流程如图所示。4.4.2任务程序的编写
即便是采用相同的控制流程,具体实现的方法也不尽相同,这里提供两种具体的实现方法。(1)基于系统嘀嗒定时器的程序(现场操作演示...)(2)基于定时器中断的程序(现场操作演示...)技能训练(选做):完成基于定时器阻塞的程序。Tobecontinued...4.5呼吸灯能力目标:
理解并掌握STM32单片机PWM的使用方法,能利用PWM技术实现呼吸灯的程序设计。任务要求:仿真电路如图所示,D1为长亮LED,D2为呼吸灯,要求实现D2亮→灭→亮→灭……的渐变效果,一次变化周期为1秒。(图中最右侧为虚拟示波器)PWM技术概述(1)PWM技术
PWM(PulseWidthModulation,脉冲宽度调制),顾名思义就是对固定周期脉冲波形的高电平宽度进行调节。如图所示,脉冲周期固定为T,脉冲持续时间(高电平宽度)为τ,为了方便分析问题,我们定义一个物理量占空比(DutyRatio)D,它与周期T、高电平宽度的关系为:上图中,脉冲波形的平均电压与占空比D,电平电压U之间的关系为:简单来说,PWM技术就是通过调节输出脉冲的占空比来达到调节输出信号平均电压的目的,一般可用于直流电机调速、开关电源、LED亮度调节等领域。(2)定时器的PWM功能STM32F103系列单片机,除了基本定时器TIM6、TIM7之外,其余定时器都有输出PWM的功能,本次任务仅介绍普通定时器TIM3输出1路PWM实现LED呼吸灯效果的方法。4.5.2任务程序的编写首先是工程的图形化配置在如图所示定时器配置设定窗口中,“CounterSettings”(计数器设定)设定PSC为79,此时定时器的计数脉冲对象周期:设定ARR为99,此时定时器一次溢出时间:PWM占空比的设定如图所示。
值得注意的是,这里PWM的溢出周期为1ms,也就是说PWM的频率为1kHz。“PWMGenerationChannelx”(通道x的PWM生成,x=1,2,3,4)设定窗口中有“Mode”(模式)和“CHPolarity”(通道极性)两个选项可以用于构成互补逻辑。此时假设定时器TIMx当前计数值为CNT。“Mode”选项:①PWMmode1:CNT<CCRx时,输出有效电平;当CNT>CCRx时,输出无效电平②PWMmode2:CNT<CCRx时,输出无效电平;当CNT>CCRx时,输出有效电平“CHPolarity”选项,有些资料也称其为“有效电平”:①low:通道极性为低电平,也可以说是有效电平为低电平,此时高电平就是无效电平②high:通道极性为高电平,也可以说是有效电平为高电平,此时低电平就是无效电平
上图所示曲线表示的是一种选择①PWM模式1、②有效电平为低电平的PWM设定模式。本次任务需要用到的新的API函数:
定时器PWM启动函数HAL_TIM_PWM_Start例程://运行定时器TIM3,并由通道2输出PWMif(HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2)!=HAL_OK){Error_Handler();}需要用到的宏定义:
定时器设置比较值宏__HAL_TIM_SET_COMPARE例程://赋予定时器TIM3的CCR2寄存器的值为50__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,50);(现场操作演示…)技能训练(选做):
修改有效电平为高电平,比较输出波形的不同之处。Tobecontinued...4.6串口通信之单字节通信能力目标:
理解并掌握STM32单片机通过串口接收/发送单个字节的方法。任务要求:将单片机实验板通过串口数据线与计算机相连,打开计算机上的串口助手,通过串口助手发送单字节数据,单片机收到该字节数据后,交换高四位与低四位,将新的数据通过串口发回串口助手。(例如:串口助手发送数据“AB”,单片机返回数据“BA”。)4.6.1串口通信(1)并行通信与串行通信并行通信串行通信优势:通信速度快
优点:通信成本低缺点:通信成本高缺点:通信速度慢(2)通信波特率通常用波特率(BaudRate)来衡量数据通信的速度。波特率是指每秒钟传送数据的位数,单位为bps(BitPerSecond),用户可根据需要进行设定。(3)异步通信与同步通信①异步通信在异步通信中,数据通常是以字节为最小单位组成数据帧传送,数据帧按照固定“节拍”(即波特率)通过发送端一帧一帧地发送,接送端则一帧一帧地接收。每一帧数据由以下四部分组成:●起始位,位于数据帧开头,仅占1位,为逻辑“0”信号。空闲状态时传送线为常态逻辑“1”信号,接收端接收到逻辑“0”信号即知道发送端开始发送数据。●数据位,位于起始位之后,根据情况可取5位、6位、7位或8位,发送顺序为低位在前高位在后。●奇偶校验位,位于所有数据位之后,仅占一位。通信双方约定统一采用奇校验或者偶校验。所谓奇校验即当传送数据中1的个数为奇数时,奇偶校验位则取1,否则取0;偶校验即当传送数据中1的个数为偶数时,奇偶校验位取1,否则取0。这是一种简单的校验方法,也可以选择无校验模式,即没有奇偶校验位。●停止位,位于数据帧末尾,为逻辑“1”,通常可取1位,1.5位或2位,用于向接收端表示一帧数据已发送完毕。异步通信发送端与接收端双方采用不同的时钟信号,一般来说波特率误差相差不超过1%均可顺利通信。②同步通信(本书不做介绍…)(4)串行通信的数据传输模式单工半双工全双工4.6.2单片机与计算机的串口通信(1)STM32单片机串口STM32串口通信采用TTL电平,由TxD(发送)、RxD(接收)、GND(信号/电源地)三条线构成,高电平+3.3V代表逻辑“1”,低电平0V代表逻辑“0”。(2)计算机RS-232串口RS-232是一种重要的计算机串口通信技术,有25线与9线(简化)两种常见接口,实际上与单片机做串口通信时经常只用到其中的三条线:TxD(发送)、RxD(接收)、GND(信号/电源地)。
RS-232标准规定-3~-15V代表逻辑“1”,+3~+15V代表逻辑“0”,通信逻辑与单片机一致。(3)单片机与计算机之间的串口通信单片机与计算机RS-232通信逻辑一致,但逻辑电平不匹配,因此仅需要在计算机RS-232串口与单片机串口之间加上一个电平转换电路即可顺利通信,常用电路为MAX3232芯片。由于RS-232技术过于老旧,目前市面上大部分个人计算机已经不再配备RS-232接口,因此也可以采用USB转串口芯片实现计算机与单片机之间的串口通信,常用芯片有FT232、PL2303、CH340。(4)虚拟串口如果想让计算机与Proteus仿真电路中的单片机实现串口通信,那必须借助于第三方虚拟串口软件,常用来自EltimaSoftware公司的产品VSPD(VisualSerialPortDriver)。4.6.3任务程序的编写设定串口USART1为“Asynchronous”(异步)通信模式,通信基本参数设定波特率19200bps、8bits字长、无校验、1位停止位,通信高级参数设定为“ReceiveandTransmit”(接收与发送)模式。然后在“NVICConfiguration”(NVIC配置)页中,将“USART1globalinterrupt”(USART1全局中断)打勾,使能串口1的中断功能。本次任务需要用到的新的API函数有:①串口接收函数(带中断)HAL_UART_Receive_IT例程://打开串口1接收中断,接收数据存入dat数组,数组长度为1if(HAL_UART_Receive_IT(&huart1,dat,1)!=HAL_OK){Error_Handler();}②串口发送函数(不带中断)HAL_UART_Transmit例如:例程://由串口1发送存在dat数组中的数据包,数组长度为1,超时1sif(HAL_UART_Transmit(&huart1,dat,1,1000)!=HAL_OK){Error_Handler();}③串口接收回调函数HAL_UART_RxCpltCallback例程:
(现场操作演示…)//串口1接收完毕回调voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){ if(huart==&huart1){…}}技能训练(选做):
单片机接收来自于计算机的字母ASCII码,自动实现大小写转换并返回给计算机。Tobecontinued...4.7ADC的电压模拟信号采集能力目标:
理解并掌握ADC的使用方法,能使用阻塞法读取可调电阻连续输出的电压模拟量对应的数字量。任务要求:仿真电路如图所示,单片机每隔1秒采集一次模拟量值,并通过串口输出其对应的数字量(ASCII格式)。4.7.1模/数转换器在单片机控制系统中,反馈通道需要采集控制系统的受控量,就必须要用到适合的传感器。绝大部分传感器都是将被测量转换为电压或者电流模拟量信号,不能直接被单片机所识别,因此必须在传感器的输出端使用一个模/数转换器(AnalogtoDigitalConverter,简称ADC),将传感器输出的模拟量转换为相应的数字量信号,然后再送给单片机作控制处理,反馈通道的信号处理过程如图所示。STM32F103R6单片机自带2个ADC(ADC1、ADC2),作用是将输入的模拟量电压信号转换为数字量信号输出,特性如下:●12位ADC,每个ADC均具备16个外部通道(编号0~15),其中ADC1有一路内部通道(编号16)连接到STM32内部温度传感器;●转换模拟量电压范围:0~3.6V;●支持单次或连续转换模式;●支持多通道的自动扫描模式;●支持转换结果的左对齐或右对齐模式;●支持DMA(DirectMemoryAccess,直接存储器访问);●最大支持14MHz工作频率。ADC每一次转换过程需要的时间称为“转换时间”。转换时间的长短取决于①输入时钟(即ADC工作频率)与②采样周期两个因素,两个参数都可以在STM32CubeIDE中进行图形化设置,转换时间的计算公式为:
转换时间TCOVN=采样周期+12.5周期ADC转换的12位数字量结果:①左对齐(LeftAlignment)
取值范围0x0000~0xFFF0②右对齐(RightAlignment)
取值范围0x0000~0x0FFFD15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0------------0000D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D00000------------4.7.2任务程序的编写工程的图形化配置,如图所示打开“Analog”→“ADC1”,勾选“IN1”即通道1,其余均采用默认设定。在如图所示时钟树设定中,ADC输入时钟直接采用了系统默认的4MHz,结合系统默认设定的采样周期1.5周期,此时的ADC转换时间为:TCOVN=1.5周期+12.5周期=14周期=14÷4MHz=3.5μs
接着设定串口1参数:19200-N-1本次任务需要用到的新的API函数有:①ADC运行启动函数
HAL_ADC_Start
例程://启动ADC1if(HAL_ADC_Start(&hadc1)!=HAL_OK){Error_Handler();}②ADC运行停止函数HAL_ADC_Stop
例程://停止ADC1if(HAL_ADC_Stop(&hadc1)!=HAL_OK){Error_Handler();}③等待ADC转换过程结束函数HAL_ADC_PollForConversion
例程://等待ADC1转换结束,超时设定为10msif(HAL_ADC_PollForConversion(&hadc1,10)!=HAL_OK){Error_Handler();}
④读取ADC转换结果函数HAL_ADC_GetValue
例程://读取ADC1的转换结果uint32_tadcv=HAL_ADC_GetValue(&hadc1);
此外,在本次任务中,还用到了一个C语言中的“sprintf()”函数,其作用为将数字转换为字符串,使用前需包含头文件“stdio.h”。
其函数声明为:intsprintf(char*string,char*format[,argument,...]);参数1为转换结果存入的字符串数组,参数2为格式化字符串,最后参数3为输入的数据,返回值为字符串的长度。
例程://将十进制数字123转换为字符串,并返回字符串的实际长度int16_tlen;//字符串长度charstr[10];//字符串数组len=sprintf(str,”%d”,123);(现场操作演示…)技能训练(选做):ADC选择左对齐模式,其它要求同本次任务。Tobecontinued...4.8FlashROM的读写能力目标:
了解STM32F103R6单片机FlashROM的基本结构与工作特性,掌握读写FlashROM的读写方法。任务要求:仿真电路如图所示,单片机能将由串口收到的1个字节数据存入到FlashROM的指定地址;按下按钮BTN,单片机将存储在FlashROM指定地址的1个字节数据通过串口发送。串口通信参数是19200-N-1。4.8.1FlashROMSTM32单片机的FlashROM即程序存储器,它的作用就是用来存放用户编写的单片机程序(机器码)。实际上,FlashROM除了用来存放单片机程序之外也可以用来保存数据,保存在FlashROM中的数据可以借助于专门的API函数进行读写,换言之这些数据可以在线修改,也能断电保存。ISP下载过程中,可以看到STM32单片机的Flashmapping(闪存映射),STM32F103R6单片机的32KBFlashROM按1KB每页页划分为32页,如右图所示。FlashROM的数据写入务必遵循如下图所示步骤。
而FlashROM的数据读取则没有繁琐的步骤,直接读取即可。4.8.2任务程序的编写Flash读写没有图形化配置步骤,本项目仅需配置串口和GPIO即可。
本次任务需要用到的新的API函数有:
①解锁FlashROM函数
HAL_FLASH_Unlock
例如:②锁定FlashROM函数HAL_FLASH_Lock
例如:if(HAL_FLASH_Unlock()!=HAL_OK){Error_Handler();}if(HAL_FLASH_Lock()!=HAL_OK){Error_Handler();}③擦除FlashROM指定部分函数HAL_FLASHEx_Erase
例程往后翻→其中,TypeErase参数有两个宏定义选项,分别是:●FLASH_TYPEERASE_PAGES(页擦除);●FLASH_TYPEERASE_MASSERASE(全部擦除)。uint32_tpage_error=0;//错误FLASH_EraseInitTypeDeferase_initstruct={.TypeErase=FLASH_TYPEERASE_PAGES,/*擦除方式--页擦除*/.NbPages=1,/*页数量--1页*/.PageAddress=0x08006400/*擦除页起始地址*/};if(HAL_FLASHEx_Erase(&erase_initstruct,&page_error);!=HAL_OK){Error_Handler();}④写入FlashROM函数HAL_FLASH_Program
例程:HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,0x08006400,0x1234);其中,TypeProgram参数有三个宏定义选项,分别是:●FLASH_TYPEPROGRAM_HALFWORD(半字,长度16位)●FLASH_TYPEPROGRAM_WORD(单字,长度32位)●FLASH_TYPEPROGRAM_DOUBLEWORD(双字,长度64位)(现场操作演示…)技能训练(选做):
修改存储地址和存储的数据,重新完成本次任务。Tobecontinued...4.9RTC的时钟设计能力目标:
了解STM32自带RTC的基本功能,掌握输出及修改RTC日期和时间信息的方法。任务要求:仿真电路如图所示,单片机每隔1秒以“YYYY-MM-DDHH:MM:SS”的格式自动向串口输出日期和时间信息(ASCII格式),起始时间设为“2020-05-2012:36:00”,自动走时,按下按钮BTN,时间自动恢复为起始时间。串口通信参数19200-N-1。4.9.1STM32的RTCRTC(RealTimeClock,实时时钟)一种常用的电子功能模块,STM32内置的RTC,可以看做是一只特殊的定时器,它可以根据输入的时钟源自动计时,用户只需校准一次日期和时间即可自动走时。STM32的RTC可通过备用电源(纽扣电池)实现掉电保持和走时功能,除此之外还提供一个“闹钟”中断源和一个“秒”中断源,用户可以利用这两个中断分别实现闹钟功能和秒点闪烁及显示时间更新的功能。4.9.2任务程序的编写首先是工程的图形化配置。如图所示,在“Categories”(分类)画面中选择“Timers”(定时器)→“RTC”,在打开的“RTCModeandConfiguration”(RTC模式与配置)画面中将“ActivateClockSource”(激活时钟源)、“ActivateCalendar”(激活日历)两项全部打钩激活。
值得注意的是,时钟和日历是两个相对独立的功能,可以同时激活,也可以二选一激活,这取决于项目的需求。在“CalendarTime”(日历时间)中,分别设定“Hour”(时)、“Minute”(分)、“Second”(秒)为“12”、“36”、“0”,表示起始时间为“12:36:00”;在“CalendarDate”(日历日期)中,分别设定“WeekDay”、“Month”、“Date”、“Year”为“Wednesday”、“May”、“20”、“20”,表示起始时间为“2020-05-20”,星期三可通过查询手机或者计算机日历获得。值得注意的是,“CalendarTime”中的“DataFormat”(数据格式)有两个选项,“BinaryDataFormat”(字面意思是二进制数据格式,实际是十进制数据格式)和“BCDDataFormat”(BCD码数据格式),实际上在设定的时候,这两个选项随便选哪个都没关系。本次任务若采用实验板实物验证,为追求时间精度,请尽可能使用外部低速晶振LSE作为RTC时钟源,若采用Proteus仿真验证,使用内部低速晶振LSI作为RTC时钟源即可,如图所示选择了LSI作为RTC时钟源。然后设定串口USART1及GPIO引脚PA5的外部中断,一键生成初始化代码后进入编程界面接着完成代码的编写。本次任务需要用到的新的API函数有:①时间获取函数HAL_RTC_GetTime
例程://以十进制格式读取RTC时间数据RTC_TimeTypeDefsTimeStructure;if(HAL_RTC_GetTime(&hrtc,&sTimeStructure,RTC_FORMAT_BIN)!=HAL_OK){Error_Handler();}sTime指向的时间结构体变量包含三个元素,分别是:●Hours(时),数据类型uint8_t;●Minutes(分),数据类型uint8_t;●Seconds(秒),数据类型uint8_t。Format具有两个宏定义选项,分别是:●RTC_FORMAT_BIN(字面意思是二进制数据格式,实际是十进制数据格式);●RTC_FORMAT_BCD(BCD码数据格式)。②日期获取函数HAL_RTC_GetDate例程往后翻页→例程:sDate指向的日期结构体变量包含四个元素,分别是:●Year(年),数据类型uint8_t,取值范围0~99(BIN格式)或0~0x99(BCD格式);●Month(月),数据类型uint8_t,取值范围1~12(BIN格式)或1~0x12(BCD格式);●Date(日),数据类型uint8_t,取值范围1~31(BIN格式)或1~0x31(BCD格式);●WeekDay(星期),数据类型uint8_t,取值范围1~7。//以BCD码格式读取RTC日期数据RTC_TimeTypeDefsDateStructure;If(HAL_RTC_GetDate(&hrtc,&sDateStructure,RTC_FORMAT_BCD)!=HAL_OK){Error_Handler();}③时间设定函数HAL_RTC_SetTime
例程://以BCD码格式设定RTC时间“12:36:00”RTC_TimeTypeDefsTimeStructure;sTimeStructure.Hours=0x12;sTimeStructure.Minutes=0x36;sTimeStructure.Seconds=0;if(HAL_RTC_SetTime(&hrtc,&sTimeStructure,RTC_FORMAT_BIN)!=HAL_OK){Error_Handler();}④日期设定函数HAL_RTC_SetDate
例程://以十进制格式设定RTC日期数据“2020-05-20星期三”RTC_TimeTypeDefsDateStructure;sDateStructure.Year=20;sDateStructure.Month=5;sDateStructure.Date=20;sDateStructure.WeekDay=3;if(HAL_RTC_SetDate(&hrtc,&sDateStructure,RTC_FORMAT_BCD)!=HAL_OK){Error_Handler();}(现场操作演示…)技能训练(选做):
修改程序,以BCD码格式获取时间,以十进制格式获取日期,其余条件不变。Tobecontinued...5.1LCD1602显示器的使用能力目标:
掌握LCD1602显示器的驱动方法,能编写简单的LCD1602驱动程序。任务要求:仿真电路如图所示,要求在屏幕第一行显示“Helloworld!”。5.1.1液晶显示屏与LCD1602为了能够显示更加丰富的信息,单片机电路设计中往往会使用到液晶显示屏。这里我们为大家介绍一种极具性价比的单色液晶显示屏——LCD1602,如图所示。这种液晶显示屏能够显示2行、16字符/行,共计32个5×7或者5×11的点阵字符,目前市面上大多数LCD1602显示屏都是采用了HD44780液晶显示芯片,当然无论采用了哪种液晶显示芯片,操作方式大同小异。(1)LCD1602的引脚定义LCD1602采用标准的16脚接口,详见表。引脚编号功能说明1VSS接电源负极2VDD电源正极(+5V/+3.3V)3VEE液晶显示器对比度调节引脚,电压越接近于VDD则对比度越低,相反电压越接近于VSS(0)则对比度越高。4RS(RegisterSelect)寄存器选择引脚,高电平时选择数据寄存器,低电平时选择指令寄存器。5RW(Read/Write)读/写信号引脚,高电平时进行读操作,低电平时进行写操作。6E(Enable)使能引脚,高电平时读取信息,下降沿时执行指令。7~14D0~D78位数据总线,D0为最低位,D7为最高位。15ALCD背光源正极16KLCD背光源负极(2)LCD1602的存储器LCD1602内置DDRAM(DisplayDataRAM,显示数据随机存储器)、CGRAM(CharacterGeneratorRAM,字符发生随机存储器)和CGROM(CharacterGeneratorROM,字符发生只读存储器)。其中DDRAM用于指定显示字符的位置,只需将需要显示的字符送至相应的DDRAM地址即可在屏幕上显示,详见下表。显示位置123456…1516DDRAM地址第一行80H81H82H83H84H85H…8EH8FH第二行C0HC1HC2HC3HC4HC5H…CEHCFHCGRAM用于由用户自定义字模,而CGROM则已经内置了160个常用字模,包括ASCII码、日文假名和希腊字母。由于本书只涉及到ASCII码的显示,具体编写程序的时候无须了解CGRAM和CGROM的知识,因此本节不作过多的介绍。(3)LCD1602的控制指令LCD1602共有11条控制指令,如表所示。序号指令RSRWD7D6D5D4D3D2D1D01复位00000000012光标归位000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标/字符移位000001S/CR/L**6置功能00001DLNF**7置CGRAM地址0001CGRAM地址8置DDRAM地址001DDRAM地址9忙标志/地址计数器01BF由最后写入的DDRAM或CGRAM设置指令设置的DDRAM/CGRAM地址10CGRAM/DDRAM写数据10写入1个字节的数据11CGRAM/DDRAM读数据11读取1个字节的数据●指令1:显示屏复位指令,清除显示屏所有显示字符,并且光标回到第一行第一个字符位置;●指令2:光标归位指令,光标回到第一行第一个字符位置;●指令3:置输入模式指令,其中I/D位为光标移动方向,0表示左移,1表示右移,S位为所有字符是否左移或者右移,0表示否,1表示是;●指令4:显示开/管控制指令,其中D位控制所有字符是否显示,0表示关显示,1表示开显示,C位控制光标是否显示,0表示关显示,1表示开显示,B位控制光标是否闪烁,0表示不闪烁,1表示闪烁;●指令5:光标和字符移位指令,位S/C为光标和字符移位控制位,0表示仅光标移动,1表示光标和字符都移动,位R/L为移动方向控制位,0表示左移,1表示右移;●指令6:功能设置指令,位DL为总线模式控制位,0表示8位总线模式,1表示4位总线模式,N为显示行数控制位,0表示单行显示,1表示双行显示,F为字符点阵模式控制位,0表示5×7点阵字符,1表示5×11点阵字符;●指令7:CGRAM地址设置指令,设置6位的CGRAM地址以读写数据;●指令8:DDRAM地址设置指令,设置7位的DDRAM地址以读写数据;●指令9:读忙信号与地址计数器返回值指令,BF返回液晶屏当前状态,返回0时表示液晶屏正忙,返回1时表示液晶屏就绪可以进一步操作,D6~D0共计7位为读取的地址计数器的内容;●指令10:CGRAM/DDRAM写数据指令,用于向CGRAM写入用户自定义字模,或者用于向指定DDRAM地址写入显示字符从而在液晶屏相应位置进行显示;●指令11:CGRAM/DDRAM读数据指令,读取CGRAM或者DDRAM中的数据。5.1.2任务程序的编写本次任务用到的GPIO引脚比较多,为避免混淆不妨给每个GPIO引脚添加用户标签(UserLabel)。考虑到代码的可移植性,这里将LCD1602相关的功能代码全部封装成函数并归入头文件“LCD1602.h”,然后在主文件“main.c”中进行调用。(现场操作演示…)技能训练:
修改程序,在液晶屏第二行以0.5秒周期循环递增显示0~99。Tobecontinued...5.2串行E2PROMAT24C02的使用能力目标:
在了解I2C总线通信规则的基础上,掌握读写E2PROM芯片AT24C02一个字节的使用方法,并能编写相应的STM32程序。任务要求:仿真电路如图所示,STM32单片机能将由串口收到的1个字节数据存入到AT24C02的首地址;按下按钮BTN1,单片机将存储在AT24C02首地址的1个字节数据通过串口发送。串口通信参数是波特率19200bps、无校验。5.3.1I2C总线简介(1)概述I2C(Inter-IntegratedCircuit)总线是目前主流的芯片间总线接口技术之一。I2C总线属于多主总线,每一个节点都可以设定唯一的地址,I2C总线连接示意图如图所示。向总线发送数据的设备作为发送器,而从总线接收数据的设备则作为接收器,通过冲突检测和仲裁可以防止总线上数据传输发生错误。目前I2C总线具有三种传输速率,①标准模式(1980年提出)为100kbps、②快速模式(1992年提出)为400kbps、③高速模式(1998年提出,并与2001年修订)可达3.4Mbps。I2C总线只有①时钟信号线SCL与②双向数据线SDA两根,如上图所示,SCL与SDA被上拉至电源VCC,也就是说I2C总线处于“空闲”状态时SCL、SDA均为高电平。(2)通信时序I2C通信时序分为发送器启动/停止通信、数据位传送、接收器返回响应信号三种。①发送器启动/停止通信(a)启动通信(b)停止通信②数据位传送在SCL处于高电平期间,SDA必须保持稳定,SDA低电平表示数据0、高电平表示数据1,只有在SCL处于低电平期间,SDA才能改变电平状态。③接收器返回响应信号数据发送器可以连续发送多个字节数据,但是每发送一个字节(8个位)数据,数据接收器必须返回一位响应信号。响应信号位若为低电平则规定为应答响应位(简称ACK),表示数据接收器接收该字节数据成功;响应信号位若为高电平则规定为非应答响应位(简称NACK),表示数据接收器接收该字节数据失败。如果数据接收器是主机,则在它收到最后一个字节数据后,返回一个非应答位,通知数据发送器结束数据发送,接着主机向总线发送一个停止通信信号结束通信过程。5.3.2AT24C02简介(1)芯片概述AT24Cxx是美国Atmel公司出品的串行E2PROM系列芯片,xx表示不同的容量。比如本次任务用到的AT24C02,表示其总容量为2KBits(256Bytes)。AT24C02的工作电压范围为1.8V~6.0V,能适应目前市面上主流的3.3V和5.0V工作电压的单片机。值得注意的是,工作电压越高,相应的工作频率也越高,典型工作电压3.3V和5.0V对应的工作频率分别是标准模式100kHz和快速模式400kHz。8个引脚的功能如下表。其中,引脚1~3参与构成AT24C02在I2C总线上的地址。地址高四位固定1010B,低四位最低位在总线“写”命令中固定为0,在总线“读”命令中固定位1,余下三位就由引脚1~3的电平决定。换言之,同一条I2C总线上,最多只能挂载8个AT24C02。引脚序号名称功能引脚序号名称功能8VCC电源正极5SDA双向数据线4GND电源负极1A0地址线(低位)7WP空引脚2A1地址线(中间位)6SCL时钟输入线3A2地址线(高位)(2)芯片的读写时序AT24C02的读写方式有:①写入字节(ByteWrite)、②写入页(PageWrite)、③读当前地址(CurrentAddressRead)、④随机读取(RandomRead)和⑤连续读取(SequentialRead)五种方式。这里仅介绍写入字节和随机读取两种。①写入字节时序写入字节即向AT24C02写入一个字节。②随机读取时序5.3.3任务程序的编写STM32F103R6本身自带一个I2C通信模块,但是在实际应用中也有一部分工程师会选择使用GPIO引脚模拟I2C的时序,这样做的好处是程序代码便于在不同的处理器上进行移植。工程图形化配置中,GPIO引脚的分配如图5-12所示,用PB6、PB7分别模拟I2C总线的时钟线SCL、数据线SDA。程序采用典型的模块化设计方式,将I2C总线时序模拟和AT24C02操作代码分别写在“vI2C.h”、“AT24C02.h”两个头文件中。
(现场操作演示…)技能训练(选做):
将原图中AT24C02的地址线A0、A1、A2分别接到高电平,重新完成本次任务。Tobecontinued...5.3串行OLED显示器的使用能力目标:
在了解I2C总线通信规则的基础上,掌握使用OLED显示器显示常用字符的方法,并能编写相应的STM32程序。任务要求:仿真电路如图所示,要求在屏幕第一行显示“Helloworld!”,在屏幕第二行显示一个动态循环递增的二位十进制数字0~99,数字变化的时间间隔为0.5秒。5.3.1OLED显示器简介(1)OLED技术概述OLED(OrganicLight-EmittingDiode,有机发光二极管),顾名思义,其本质上是一种特殊的发光二极管,是一种利用多层有机薄膜结构产生电致发光的器件。与LCD显示器相比,OLED显示器技术更加新颖,具备外形轻薄、亮度高、功耗低、响应快、清晰度高、柔性好、发光效率高等优点,目前在手机屏幕、计算机显示器、游戏掌机屏幕等领域均有广泛应用。(2)OLED12864显示器OLED12864是一种单色显示的小尺寸显示器,屏幕尺寸仅0.96吋,具有128×64的分辨率,其正面(左)与反面(右)的照片分别如下图所示。OLED12864采用3.3~5V宽电压供电,适用于包括MCS-51、STM32在内的各种主流单片机。OLED12864可视角度能达到160°,因为OLED12864从本质上来说是一种高密度发光二极管点阵显示器,所以不需要背光设计,仅靠点阵自身发光即可满足显示需求。(3)显示驱动方式
OLED12864采用SSD1306进行驱动,支持8位6800/8080串并联接口、I2C与SPI串行接口,本教材仅介绍其中的I2C通信方式。显示器在出厂的时候仅预留了I2C通信接口的4个引脚——电源正极VCC、电源负极GND、时钟引脚SCL、数据引脚SDA。
SSD1306内置GDDRAM(GraphicDisplayDataRAM,图形显示数据RAM),其结构如下图所示,分为8个页(PAGE0~PAGE7),每页128个字节(SEG0~SEG127),共计128*64bits,每个bit与OLED屏的像素一一对应,需要OLED屏哪个像素点发光,则向对应的GDDRAM位中写入1即可,反之写入0。
在I2C通信模式下,由单片机作为通信主机与作为从机的SSD1306通信数据包结构如下图所示。
主机单向发送数据包给从机即可实现单片机对OLED显示器的控制,该过程无需从机响应。表格1:SSD1306命令字节——基本命令(D/C#=0,R/W#(WR#)=0,E(RD#=1)除非有特殊说明,所有命令表均适用)序号HEX命令描述181HA[5:0]设置对比度双字节命令,第一个字节为命令,第二个字节为参数,通过低六位设定,缺省值7FH。(后面还有若干双字节命令,不再赘述。)2A6H/A7H设置正常/逆显示A6H:正常显示(缺省);A7H:逆显示。3AEH/AFH设置显示关/开AEH:关显示(缺省);AFH:正常显示。表格2:SSD1306命令字节——寻址设置命令序号HEX命令描述100H~0FH设置页面寻址方式的列起始地址(低四位)设置列起始地址的低四位,使用低四位进行设定,复位值0000B。210H~1FH设置页面寻址方式的列起始地址(高四位)设置列起始地址的高四位,使用低四位进行设定,复位值0000B。3B0H~B7H设置页面寻址方式的起始页地址使用低三位设置GDDRAM页面的起始地址(PAGE0~PAGE7)。表格3:SSD1306命令字节——硬件配置命令序号HEX命令描述140H~7FH设置显示起始行设置显示起始行0~63,D6位固定为1,通过低六位设定[5:0],复位值000000B。2A0H/A1H设置段重映射A0H:列地址0映射到SEG0(缺省);A1H:列地址127映射到SEG0。3A8HA[5:0]设置复用率第二个字节为参数,若参数取值N,则比例为N+1(比如,参数设定63D,比例即为64D),比例范围16~64,即参数取值0FH~3FH(复位值)。此命令用于将默认的64复用率更改至任何范围为16~64的值,COM0~COM63输出将切换到设定的输出信号。4C0H/C8H设置COM输出扫描方向C0H:正向扫描,从COM0向COM[N-1]扫描(缺省);C8H:反向扫描,从COM[N-1]向COM0扫描。N即为上一条指令中的复用率。此指令一旦执行,屏幕将会立刻垂直翻转。5D3HA[5:0]设置显示偏移第二个字节用于设置屏幕起始行,通常设置为00H,即无偏移。此指令用于设置列信号引脚配置来适应OLED面板的硬件布局。6DAHA[5:4]设置COM引脚硬件配置A[4]=0,顺序COM脚配置;A[4]=1,可变COM脚配置(缺省);A[5]=0,禁用COM左右重映射(缺省);A[5]=1,启用COM左右重映射。表格4:SSD1306命令字节——时间和驱动方案设置命令序号HEX命令描述1D5HA[7:0]设置显示时钟分频系数与振荡频率A[3:0],分频系数=A[3:0]+1,复位值0000B,分频系数即为1;A[7:4],振荡频率为0000B~1111B,缺省值1000B(即8MHz)。2D9HA[7:0]预充电周期(包括放电周期)[3:0],放电周期,取值0001B~1111B,缺省2H;[7:4],预充电周期,取值0001B~1111B,缺省2H3DBHA[6:4]设置VCOMH取消选定电平A[6:4]HEX数值VCOMH取消选定电平000B00H~0.65×VCC010B20H~0.77×VCC(缺省)011B30H~0.83×VCC表格5:SSD1306命令字节——电荷泵命令序号HEX命令描述18DHA[7:0]电荷泵设置8DH:电荷泵设置14H:使能电荷泵AFH:开显示(4)显示字符的设计
OLED12864是一种高密度发光二极管点阵显示器,理论上可以显示任何字符与图案,可以手动编辑显示数据用于记录显示器各个坐标点的亮灭状态,但实际上人们常常会借助于专门的取字模软件来建立显示数组,比如PCtoLCD2002。
打开PCtoLCD2002并新建一个8×16的图案,如右图所示。
不妨以上述“P”字点阵数据为例,我们不妨采用画格子的方式来还原这组数据代表的含义,“1”用黑色填充表示,“0”则用空白表示,如下图所示,左图是原始数据点阵图,右图是分割、拼接、旋转之后的点阵图。5.3.2任务程序的编写
(现场操作演示…)技能训练(选做):
修改任务“4.9RTC的时钟设计”,将时间显示由串口输出改为OLED显示。Tobecontinued...5.4串行温度传感器TC72的使用江苏信息职业技术学院智能工程学院能力目标:
在了解SPI总线通信规则的基础上,掌握读写温度传感器芯片TC72读写数据的方法,并能编写相应的STM32程序。任务要求:仿真电路如图所示,单片机每隔1秒钟读取一次温度传感器TC72的温度值,并通过串口将读取的温度值发送出去。串口通信参数:19200-N-1。5.4.1SPI总线简介(1)SPI总线概述
SPI(SerialPeripheralInterface,串行外设接口)是美国Motorola公司推出的一种同步串行通信接口,用于微处理器与外围芯片之间的串行连接。SPI目前已成为一种工业标准,世界各大半导体公司均推出带有SPI接口的微处理器与外围器件。SPI采用主从式通信模式,通常为一主多从结构,通信时钟由主机控制,在时钟信号的作用下,数据先传送高位,再传送低位。Motorola公司没有规定SPI协议的通信速度,因此通信速度应根据实际项目中主机和从机的通信能力而定。(2)接口定义SPI通信至少需要4根线:●SCLK,时钟线,用于提供通信所需的时钟基准信号;●MOSI,主出从入数据线,对于主机而言作为数据输出总线,对于从机而言作为数据输入总线;●MISO,主入从出数据线,对于主机而言作为数据输入总线,对于从机而言作为数据输出总线;●,片选信号,低电平有效。但本次任务涉及的TC72例外,有效电平为高电平。如图所示为一主多从SPI总线硬件连接示意图。(3)通信时序SPI通信的工作时序有四种,如所示,具体由CPHA(ClockPhase,时钟相位)和CPOL(ClockPolarity,时钟极性)决定。CPHA=0时的SPI工作时序CPHA=1时的SPI工作时序CPHA和CPOL的作用为:●CPHA,CPHA=0时,信号采样时刻为两个空闲状态之间的第一个边沿;CPHA=1时,信号采样时刻为两个空闲状态之间的第二个边沿。●CPOL,CPOL=0时,时钟信号SCK空闲为低电平;CPOL=1时,时钟信号SCK空闲为高电平。因此,SPI的四种通信模式总结如下表所示。通信模式CPHACPOL说明MODE000SCK空闲为低电平,上升沿时刻采样MODE110SCK空闲为低电平,下降沿时刻采样MODE201SCK空闲为高电平,下降沿时刻采样MODE311SCK空闲为高电平,上升沿时刻采样5.4.2TC72简介TC72是美国MicroChip公司出品的串行温度传感芯片,兼容SPI接口,温度测量范围为-55~+125℃,分辨率为10位(0.25℃/Bit)。TC72的工作电压为2.65~5.5V,能适应目前市面上主流的3.3V和5.0V工作电压的单片机。TC72芯片引脚排序及实物如下图所示。8个引脚的功能分别如下表所示。引脚序号名称功能引脚序号名称功能8VDD电源正极6SDI数据输入线4GND电源负极5SDO数据输出线2CE片选线(高电平有效)1NC空引脚3SCK时钟输入线7NC空引脚TC72的工作模式有:●连续转换模式(ContinuousConversionMode),每隔约150毫秒进行一次温度转换;●单次转换模式(One-ShotMode),转换一次后就进入省电模式。TC72的寄存器格式如下表所示。TC72的温度值转换结果采用左对齐数据存储格式,高字节存放温度值的整数部分,最高位T9为符号位,低字节高两位存放温度值的小数部分,数据以补码形式存放。寄存器读地址写地址B7B6B5B4B3B2B1B0控制0x000x80000单次010关断温度LSB0x01N/AT1T0000000温度MSB0x02N/AT9T8T7T6T5T4T3T2制造商ID0x03N/A010101005.4.3任务程序的编写STM32F103R6本身自带一个SPI通信模块,但是在实际应用中也有一部分工程师会选择使用GPIO引脚模拟SPI的时序,这样做的好处是程序代码便于在不同的处理器上进行移植,这一点与上一个任务中学习的I2C类似。首先是工程的图形化配置,如右图所示。然后设定串口USART1,一键生成初始化代码后进入编程界面接着完成代码的编写。(现场操作演示…)技能训练(选做):
将TC72单次转换修改为连续转换,比较其转换效果有何不同。Tobecontinued...5.5串行DACMCP4921的使用能力目标:
掌握控制DAC芯片MCP4921输出电压的方法,并能编写相应的STM32程序。任务要求:仿真电路如下图所示,单片机控制MCP4921以1秒周期输出正弦波,正弦波波动范围0~3.3V。5.5.1MCP4921简介单片机控制系统中,有时会涉及到一些需要通过模拟量信号控制的执行器(比如变频器、电动阀门等),这就需要用到数模转换器(DigitaltoAnalogConverter,简称DAC),单片机将计算得到的数字量控制信号通过DAC转换成模拟量信号后控制执行器做出相应的动作。本次任务选择了独立的DAC芯片,其型号是MCP4921,如下图所示。MCP4921是美国MicroChip公司出品的串行12位DAC芯片,兼容SPI接口,最大通信频率20MHz,一次转换时间4.5μs,工作电压2.7~5.5V,能适应目前市面上主流的3.3V和5.0V工作电压的单片机。8个引脚的功能分别如下表所示。MCP4921只有数据输入,没有数据输出,单片机仅需将12位数字量连同4位配置信息一共16位数据一起打包发送给DAC,DAC随即开始数模转换过程,通信数据格式如表所示。
(表格往后翻页→)引脚序号名称功能引脚序号名称功能1VDD电源正极2片选线(低电平有效)7VSS电源负极3SCK时钟输入线6VREF参考电压4SDI数据输入线5同步输入控制8VOUT模拟量电压输出正极每一个配置位的含义如下:●,该位只能选0,因为MCP49xx系列DAC中有些型号具有两个DAC通道,通过0或1选择通道A或B,但MCP4921仅有A通道;●BUF,VREF输入缓冲器控制位,设1时缓冲,设0时未缓冲;●,输出增益选择位,设1时无增益,设0时两倍增益;●,待机模式设置位,设1时不进入待机模式,设0时进入待机模式。高字节MSB低字节LSB配置位数据位BUFB11B10B9B8B7B6B5B4B3B2B1B05.5.2任务程序的编制MCP4921是一个12位DAC,因此输入数字量的范围是0x000~0x3FF,输出模拟量电压范围从0~VREF,即无法输出负电压。为了输出完整的正弦曲线,不妨将正弦波曲线沿纵轴(电压/数字量)正向移动,确保波谷也位于横轴(时间)上方。
正弦波计算公式:
为了提高单片机CPU的执行效率,此处使用查表法,在1秒内,每隔0.02秒计算一次采样值,可以利用excel进行计算,如图。
计算结果如图。与任务5.4相同,分别将单片机的PA4、PA5、PA7设为片选线、时钟线、MOSI线,引脚设定参数可参照任务5.4,由于MCP4921没有SDO引脚,因此不需要使用单片机的PA6引脚。(现场操作演示…)技能训练:
尝试输出不同的曲线,比如锯齿波、三角波等。Tobecontinued...5.6直流电动机的控制能力目标:
理解H桥电路的工作原理,掌握H桥芯片L298的使用方法,并能编写基于L298的直流电动机的STM32驱动程序。任务要求:仿真电路如图所示,要求通过五只按钮控制直流电动机的运行状态,五只按钮的作用分别是:电动机正转、电动机反转、电动机停止、电动机加速和电动机减速,其中电动机加速/减速实则以10%的PWM占空比为递增/递减量。5.6.1直流电动机与H桥电路直流电动机是一种常见的动力源,在很多情况下需要用到直流电动机带动执行机构做各种复杂动作,常需要直流电机能够做正反转运动。如图所示的H桥是一种常见的直流电动机正反转控制电路。正转
反转
制动5.6.2双H桥芯片L298市面上有许多种H桥芯片,这里介绍其中一种——L298。L298是ST公司(意法半导体公司)出品的一种双H桥芯片,即片内集成两个独立的H桥,可同时驱动两只最高电压46V、最大电流2A直流电动机。如左下图所示为L298的两种封装形式。如右图所示电路是L298的一种典型应用电路,控制信号为5VTTL电平,驱动电压为5V~46V,控制电路由Vss供电,驱动电路由Vs供电。L298各引脚功能:●ENA引脚为H桥A的使能引脚,当ENA接高电平时,使能H桥A,而当ENA接低电平时,禁止H桥A。实际使用中,往往将该引脚连接PWM信号用于调节H桥A控制的直流电动机的转速。●ENB引脚为H桥B的使能引脚,功能与ENA类似,不再赘述。●ISENA引脚为H桥A的驱动检测引脚,用来做过流检测反馈给控制器形成闭环以稳定电机转速,具体应用可参考相关技术文档。一般不用可直接接地。●ISENB引脚为H桥B的驱动检测引脚,功能与ISENA类似,不再赘述。●IN1~IN4为两个H桥的方向控制信号输入端,其中IN1、IN2控制H桥A,IN3、IN4控制H桥B,具体如下表所示。(
H表示高电平,L表示低电平;Motor1表示H桥A控制的直流电动机,Motor2表示H桥B控制的直流电动机。)IN1IN2Motor1状态IN3IN4Motor2状态LL停止LL停止LH正转LH正转HL反转HL反转HH停止HH停止●OUT1~OUT4为两个H桥的输出端,用来连接两只直流电动机。其中OUT1、OUT2用来连接Motor1,OUT3、OUT4用来连接Motor2。
电路中的8只整流二极管作用是防止电动机转向改变时产生的冲击电流打坏L298芯片,仿真无需考虑这个问题。
值得注意的是,L298的控制电路的工作电压是5V,而STM32的工作电压只有3.3V,为了让L298能正确识别STM32发出的控制信号,采用实物验证时,务必①选择具备“FT”特性的GPIO引脚,并②将引脚设为开漏模式并外接上拉电阻到5V电源正极。5.6.3任务程序的编写首先是工程的图形化配置,包括串口的设置、外部中断的设置、PWM输出的设置及GPIO的设置,其中GPIO选择具备“FT”特性的PC8、PC9,均设为开漏模式,如下图所示。
PWM输出的设置请参考任务4.5,但需要进一步修改PWM输出引脚PC7为开漏模式,如所示。图形化配置完成后,一键生成初始化代码后进入编程界面接着完成代码的编写。(现场操作演示…)技能训练(选做):
尝试以L298的通道2驱动一直直流电动机,其他要求不变。Tobecontinued...5.7步进电动机的控制能力目标:
了解ULN2803的使用方法,能编写步进电动机的驱动程序。任务要求:
仿真电路如右图所示,有一只12V四相六线步进电动机,要求通过七只按钮控制步进电动机的运行状态,七只按钮的作用分别是:连续正转、连续反转、停止、加速、减速、点动正转和点动反转。5.7.1达林顿晶体管阵列ULN2803ULN2803内部具有一个8路NPN达林顿晶体管阵列,适合作为TTL、CMOS、NMOS或PMOS等低逻辑电平数字电路与继电器、步进电动机等直流高电压、大电流设备之间的接口。如下图所示为DIP封装的ULN2803引脚排序及实物,引脚1~8为8路输入,引脚11~18为8路输出,引脚9为GND,引脚10为公共端。ULN2803的主要参数:●输入5V低逻辑电平;●输出驱动负载电压最高50V;●每一路输出驱动负载电流最高500mA。如右上图所示为8路达林顿晶体管其中某一路的内部电路结构示意图,显然,ULN2803属于集电极开路输出,只能接受灌电流。实际使用的时候,一般将负载一端接在公共引脚COM,将负载另一端接在输出引脚On(n=1,2,3,…,8),COM引脚同时连接负载高电压,输入的逻辑信号地和输出的电源地同时连接GND引脚,如右下图所示。当输入逻辑信号为高电平时,达林顿管导通,On引脚接地,负载回路通路;当输入逻辑信号为低电平时,达林顿管截止,负载回路断路。值得注意的是,当负载为继电器线圈时,由于输出引脚与公共引脚之间已经存在一个内置的续流二极管,因此无需外接续流二极管。另外,ULN2803输入的逻辑高电平是+5V电平,因此STM32需要选择具备“FT”特性的GPIO引脚连接到ULN2803的输入引脚,并将STM32的这些GPIO引脚设为开漏模式,通过外部电阻上拉到+5V电位。5.7.2步进电动机的驱动Proteus中的步进电动机“MotorStepper”,它是一种四相六线制步进电动机,四相分为A相、B相、C相、D相,可以选择四相单四拍、四相双四拍或四相单双八拍三种驱动方式,如下表。四相单四拍四相双四拍四相单双八拍相序1B2B3B4B相序1B2B3B4B相序1B2B3B4B相序1B2B3B4B1-A10001-AB11001-A10005-C00102-B01002-BC01102-AB11006-CD00113-C00103-CD00113-B01007-D00014-D00014-DA10014-BC01108-DA10015.7.3任务程序的编写这里选择四相双四拍的驱动方式。
(现场操作演示…)技能训练(选做):
修改驱动方式,改为四相单双八拍,比较步进电动机运行状态有何区别。Tobecontinued...6.1工业计数器的设计能力目标:
认知工业自动化产品中的工业计数器,在理解的基础上掌握其主要功能,并完成产品主要功能的设计。任务要求:绘制工业计数器的仿真电路,并完成STM32单片机程序的设计,要求实现如下功能:(1)采用5位计数,即计数范围为0~99999;(2)具备计数暂停/运行功能,通过按钮实现;(3)具备计数清零功能,通过按钮实现。6.1.1工业计数器简介
在工厂流水线上,经常需要对产品个数进行计数,这就需要用到计数装置,通常实现的方法有两种:
①利用PLC(ProgrammableLogicController,可编程逻辑控制器)进行计数;
②利用独立的计数模块进行计数。(✔)无论是采用PLC计数,还是采用独立的计数模块进行计数,都需要用到检测传感器。检测传感器种类很多,比如下图所示是一种工作电压为5V的三线式光电开关。
仿真的时候,可以用一个按钮或者
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 03短文还原(五选五)-2021-2022学年八年级英语上学期期末复习题型专练
- 注册安全工程师案例分析单选题100道及答案解析
- 浙江省宁波市慈溪市2023-2024学年高二下学期6月期末化学试题
- 4S店内部装修协议
- 道 法探问人生目标+课件-2024-2025学年统编版道德与法治七年级上册
- 2023-2024学年全国小学三年级下语文仁爱版期末试卷(含答案解析)
- 热力学第二定律
- 2024年株洲道路旅客运输知识考试题库
- 2024年公司员工培训协议书
- 2024年中卫汽车客运从业资格考试
- 学生劳动任务的评价标准
- 基于数据的医疗质量管理策略
- 会务服务投标方案(技术标)
- 乡村医生预防接种培训课件
- 费尔巴哈论第四部分
- JGT368-2012钢筋桁架楼承板规范
- 项目交接单模板
- 科学思维透视高考高中生物说题比赛
- 小学信息技术-声控的秘密教学设计学情分析教材分析课后反思
- 课程名称耳应用解剖学
- 安徽高中会考:《通用技术》2023年考试真题与答案解析
评论
0/150
提交评论