嵌入式PWM控制电路.doc_第1页
嵌入式PWM控制电路.doc_第2页
嵌入式PWM控制电路.doc_第3页
嵌入式PWM控制电路.doc_第4页
嵌入式PWM控制电路.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式作业院系: 班级: 姓名: 学号: PWM控制电路一、要求:PWM 控制电路,要求能够输出8路任意频率,任意占空比的 PWM波。二、流程图: 开始 系统初始化 引脚初始化 定时器参数计算 定时器设置 PWM生成三、具体步骤 int main(void) unsigned char i = 0;for(i = 0; i 4; i+)Cnt3i= 0;T3i = 0;R3i = 0;Rh3i = 0;Rl3i = 0;F3i = 0; Cnt4i= 0;T4i = 0;R4i = 0;Rh4i = 0;Rl4i = 0;F4i = 0;/t的范围为(065536)T30 = 450; /F=40KT31 = 600; /F=30KT32 = 900; /F=20KT33 = 1800; /F=10K/F(占空比)的范围为(0100)F30 = 40;F31 = 30;F32 = 20;F33 = 10; /t的范围为(065536)T40 = 750; /F=40KT41 = 600; /F=30KT42 = 900; /F=20KT43 = 1400; /F=10K/F(占空比)的范围为(0100)F40 = 40;F41 = 30;F42 = 20;F43 = 50; SystemInit(); GPIO_Config(); TIM5_Init();/* TIM3 PWM波输出初始化,并使能TIM3 PWM输出 */TIM5_PWM_Init();TIM4_Init();TIM4_PWM_Init(); while (1) 经查阅资料得知,用STM32定时器的PWM模式只能在4个通道上产生频率相同但占空比不同的PWM 波,要想输出PWM频率可调,占空比可调,必须得使用比较输出模式。使用定时器的输出比较触发模式,通过改变各通道比较寄存器(如CCR1)中的值,改变PWM的占空比,在每次各通道匹配中断中改变CCR1的值。1、I/O配置配置TIM3和TIM4的共8个通道所占用的I/O口。void GPIO_Config(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 |RCC_APB1Periph_TIM4 , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; / 复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin =GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ; GPIO_Init(GPIOD, &GPIO_InitStructure);2、占空比设置int main(void) unsigned char i = 0;for(i = 0; i 4; i+)Cnt3i= 0;T3i = 0;R3i = 0;Rh3i = 0;Rl3i = 0;F3i = 0; Cnt4i= 0;T4i = 0;R4i = 0;Rh4i = 0;Rl4i = 0;F4i = 0;/t的范围为(065536)T30 = 450; /F=40KT31 = 600; /F=30KT32 = 900; /F=20KT33 = 1800; /F=10K/F(占空比)的范围为(0100)F30 = 40;F31 = 30;F32 = 20;F33 = 10; /t的范围为(065536)T40 = 750; /F=40KT41 = 600; /F=30KT42 = 900; /F=20KT43 = 1400; /F=10K/F(占空比)的范围为(0100)F40 = 40;F41 = 30;F42 = 20;F43 = 50;3、设置定时器中断 void TIM3_NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); void TIM4_NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 4、计算出输出高、低电平时间Rh3i和Rh4i=通道i的高电平时间;Rl3i和Rl4i =通道i的低电平时间,把Rl3i 、Rl4i写入对应的输出比较寄存器,并启动计数器开始计数。void TIM3_Init(void)unsigned char i = 0;for(i = 0; i 4; i+)Rh3i = (T3i * F3i) / 100;Rl3i = T3i - Rh3i;R30 = Rl30;R31 = Rl31;R32 = Rl32;R33 = Rl33;CCR3_1 = R30;CCR3_2 = R31;CCR3_3 = R32;CCR3_4 = R33;void TIM4_Init(void) unsigned char i = 0; for(i = 0; i 65535)R30=R30-65535;CCR3_1=R30;TIM_SetCompare1(TIM3,CCR3_1); void TIM4_IRQHandler(void)if(TIM_GetITStatus(TIM4,TIM_IT_CC1)!=RESET)TIM_ClearITPendingBit(TIM4,TIM_IT_CC1);C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论