基于stm32的舵机控制系统毕业设计论文(编辑修改稿)内容摘要:

关的硬件电路,即振荡器和时钟电路。 常用的时钟电路设计有两种方式,一种是内部时钟方式,另一种是外部时钟电路方式。 本系统采用了内部时钟方式,利用 STM32 内部的振荡器,然后在引脚 OSCIN和 OSCOUT 两端跨接晶体,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟电路,如图 所示。 沈阳航空航天大学北方科技学院毕业设计 (论文) 11 图 STM32内部时钟方 式电路 外接晶振时, C1 和 C2 值选择为 27pF, C1, C2 对频率有微调作用,晶体振荡频率为 12MHz。 在实际连接中,为了减少寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器和电容应尽可能安装得与单片机芯片靠近。 沈阳航空航天大学北方科技学院毕业设计 (论文) 12 第 3章 软件设计 STM32 固件库简介 STM32 的 函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。 该函数库还包括每一个外设的驱动描述和应用实例。 通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。 因此,使用本固态函数库可以大大减少用户的程序编写时 间,进而降低开发成本。 每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。 每个器件的开发都由一个通用 API (application programming interface 应用编程界面 )驱动,API 对该驱动程序的结构,函数和参数名称都进行了标准化。 所有的驱动源代码都符合 “Strict ANSIC”标准(项目于范例文件符合扩充ANSIC 标准)。 驱动源代码 已经 文档化,他们同时兼容 MISRAC 2020 标准(根据需要,我们可以提供兼容矩阵)。 由于整个固态函数库按照 “Strict ANSIC”标准编写,它不受不同开发环境的影响。 仅对话启动文件取决于开发环境。 该固态函数库通过校验所有库函数的输入值来实现实时错误检测。 该动态校验提高了软件的鲁棒性。 实时检测适合于用户应用程序的开发和调试。 但这会增加了成本,可以在最终应用程序代码中移去,以优化代码大小和执行速度。 因为该固件库是通用的,并且包括了所有外设的功能,所以应用程序代码的大小和执行速度可能不是最优的。 对大多数应用程序来说,用户可以直接使用之,对于那些在代码大小和执行速度方面有严格要求的应用程序,该固件库驱动程序可以作为如何设置外设的一份参 考资料,根据实际需求对其进行调整。 本设计即是利用 STM32 中的固件库为基础而编写的,直接调用现成的外设驱动函数使得主程序变的更加简洁,可读性比较高。 本设计中用到的固件库函数主要有时钟初始化相关的固件库函数、 I/O 口初始化相关的固件库函数和 SPI 总线接口相关的固件库函数。 沈阳航空航天大学北方科技学院毕业设计 (论文) 13 软件的总体设计 本设计的程序编辑完成后放在项目的主程 序中是在其中的一个时间片执行的,也就是说主程序周期性的采集所输入的模拟值。 在本设计中由于要保证程序的连续的运行,所以要持续的对输入量 进行采集,也就是说本设计中的各个初始化工 作完成之后程序 会死循环在通讯子程序里面,从而连续不断的采集控制的模拟 值。 设计原程序时采用模块化的思想,将程序划分为几块,这样做即使得程序结构清晰、增强可读性,又使得程序在调试的时候可以 单独对每个子程序分别调试,减少了程序调试的时间。 本设计的源程序主要分为以下几个部分:时钟初始化子程序,GIPO 初始化子程序, 嵌套向量中断控制器 (NVIC)初始化子程序和 A/D 转换 子程序。 软件的总体流程图如下图 所示。 图 软件总体流程图 开始 系统时钟初始化 GIPO 初始化 NVIC 初始化 A/D 初始化( DMA 模式) PWM 信号 判断数据 改 变 是 否 LCD 显示 沈阳航空航天大学北方科技学院毕业设计 (论文) 14 时钟初始化子程序 系统时钟 SYSCLK 可以选择三种类型的时钟提供: HSE、 HIS 和 PLLCLK,其中 HSE 为外部高速时钟,可以由外部晶振电路提供,晶振电路分别接到 SOC_IN 和SOC_OUT 即可,而 HSI 时钟信号由内部 8MHz 的 RC 振荡器产生,可直接作为系统时钟或在 2 分频后作为 PLL 输入,由于外部时钟源工作稳定而且时钟频率精确,所以本设计采用外部时钟源作为系统的时钟。 STM32 的系统时钟可以有内部的振荡器提供,也可以由外部的由晶振构成是振荡电路提供时钟,本设计中采用外部振荡电路为 STM32 提供稳定的时钟脉冲。 由于 STM32 中的包含的 大部分外设是在连续的时钟脉冲下才能正常工作,所以STM32 中存在一些分频器和倍频器,这些分频器或倍频器将系统时钟进行分频或者倍频用来为相应的外设提供合适的时钟信号 ,下图 为 STM32 时钟树。 沈阳航空航天大学北方科技学院毕业设计 (论文) 15 图 STM32时钟树 沈阳航空航天大学北方科技学院毕业设计 (论文) 16 本设计所需的 STM32 的外设包括 TIM TIM3 和 GPIOA 口,所以也要对 外设的时钟进行设置。 由 于在 APB1 和 APB2 系统总线 外设 上,所以要对 APB1 和 APB2总线的时钟频率进行设置。 经过 APB1 与 APB2 的分频, 将 SYSCLK 转换成可以进行外设及 TIMX 可以接收的 系统时钟。 在时钟初始化子程序中先对系统时钟的模式进行选择,即将系统时钟设置为 HSE 模式(外部时钟模式),然后设置 AHB 时钟等于系统时钟, 且设置了低速或高速 AHB, 最后使能的时钟 ,时钟初始化子程序的流程图如下图。 图 时钟初始化流程图 I/O 口初始化子程序 开始 设置 PLL 时钟源及倍频系数 使能外部高速晶振 HSE 设置 AHB 时钟 HSE 设置成功。 是 检查指定的 RCC 标志位设置与否 选 PLL 作为系统的时钟 否 否 是 沈阳航空航天大学北方科技学院毕业设计 (论文) 17 每个 GPI/O 端口有两个 32 位配置寄存器 (GPIOx_CRL, GPIOx_CRH),两个 32位数据寄存器 (GPIOx_IDR 和 GPIOx_ODR) ,一个 32 位置位 / 复位寄存器(GPIOx_BSRR),一个 16 位复位寄存器 (GPIOx_BRR)和一个 32 位锁定寄存器(GPIOx_LCKR)。 每个 I/O 端口位可以自由编程,然而 I/0 端口寄存器必须按 32 位字被访问。 GPIOx_BSRR 和 GPIOx_BRR 寄存器允许对任何 GPIO 寄存器的读 /更改的独立访问;这样,在读和更改访问之间产生 IRQ 时不会发生危险。 当作为输出配置时,写到输出数据寄存器上的值 (GPIOx_ODR)输出到相应的 I/O 引脚。 可以以推挽模式或开漏模式 (当输出 0 时,只有 NMOS 被打开 )使用输出驱动器。 输入数据寄存器 (GPIOx_IDR)在每个 APB2 时钟周期捕捉 I/O 引脚上的数据。 本设计使用的STM32 的 TIM _Channel_1,其接口对应的是 STM32 上的 PA6 口。 设计中 PA6 的通讯方式是推挽式输出方式,设置的最高输出速率为 50MHz。 PWM 信号子 程序 脉冲宽度调制( PWM)是一种对模拟信号电平进行数字编码的方法。 通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。 脉冲宽度调制模式可以产生一个由 TIM3_ARR 寄存器确定频率、由 TIM3_CCRx寄存器确定占空比的信号。 在 TIM3_CCMRx 寄存器中的 OCxM 位写入 ’110’,确定PWM 模式 1,能够独立地设置 OC1 输出通道产生一路 PWM。 通过设置TIM3_CounterMode 设置其为向上计数 , 通过设置 TIM3_CCMRx 寄存器的 OC1_PE位使能相应的预装载寄存器,最后还要设置 TIM3_CR1 寄存器的 ARPE 位使能自动重装载的预装载寄存器。 因为仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计数之前,必须通过设置 TIM3_EGR 寄存器中的 UG 位来初始化所有的寄存器。 OCx 的极性可以通过软件在 TIMx_CCER 寄存器中的 CCxP 位设置,它可以设置为高电平有效或低电平有效。 OCx 的输出使能通过 (TIMx_CCER 和 TIMx_BDTR 寄存器中 )CCxE、 CCxNE、 MOE、 OSSI 和 OSSR位的组合控制。 在 PWM 模式 1 下, TIMx_CNT 和 TIMx_CCRx 始终在进行比较,依 据 计 数 器 的 计 数 方 向 以 确 定 是 否 符 合 TIMx_CCRx≤TIMx_CNT 或者TIMx_CNT≤TIMx_CCRx。 根据 TIMx_CR1 寄存器中 CMS 位的状态,定时器能够产生边沿对齐的 PWM 信号或中央对齐的 PWM 信号。 沈阳航空航天大学北方科技学院毕业设计 (论文) 18 A/D 转换 初始化子程序 12 位 ADC 是一种逐次逼近型模拟数字转换器。 它有 18 个通道,可测量 16 个外部和 2 个内部信号源 , 可以把转换分成两组:规则的和注入的。 在任意多个通道上以任意顺序进行的一系列转换构成成组转换, 各通道的 A/D 转换可以单次、连续、扫描或间断模式执行, ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。 在开始 ADC 转换和 14 个时钟周期后, EOC 标志被设置, 16 位 ADC 数据寄存器包含转换的结果。 时序图 如下图, 图 时序图 在 ADC 初始化设置时,首先开启 AHB 外设时钟使能寄存器 DMA1 时钟,定义转换数据量, 设置 DMA 的通道 1 的初始化, 独立地选择 通道的采样时间,在通道 1 设置看门狗,开启 ADC1 并启动转换,应用连续转换模式,使用 DMA 模式 ,接着便 开始转换规则通道 ,完成由模拟量到数据量的转变。 其结构图如下, 沈阳航空航天大学北方科技学院毕业设计 (论文) 19 图 ADC转换 LCD 显示 子程序 液晶显示模块的显示器上的显示点与驱动控制芯片中的显示缓存 RAM是一一对应的;驱动控制芯片当中共有 65( 8 Page x 8 bit+1) X 132个位的显示 RAM 区。 而显示器的显示点阵大小为 64X128点,所以 实际上在液晶显示模块中有用的显示 RAM 区为 64 X 128个位;按 byte为单位划分,共分为 8个 Page,每个 Page为 8行,而每一行为 128个位(即 128列)。 驱动控制芯片的显示 RAM区每个 byte的数据对应屏上的点的排列方式为:纵向排列,低位在上高位在下。 如要点亮 LCD屏上的某一个点时,实际上就是对该点所对应的显示 RAM区中的某一个位进行置 1操作;所以就要确定该点所处的行地址、列地址。 从图中可以看出, MzL0212864液晶显示模组的行地址实际上就是 Page的信息,每一个 Page应有 8行;而列地址则 表示该点的横坐标,在屏上为从左到右排列, Page中的一个 Byte对应的是一列( 8行,即 8个点),达 128列 , 根据这样的关系在程序中控制 LCD显示屏的显示。 开始 开启 AHB 寄 存器 设置看门狗 设置转换模式 开启转换通道 开始转换 沈阳航空航天大学北方科技学院毕业设。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。