当前位置: 首页 > news >正文

上海哪家做网站好营销手段和技巧

上海哪家做网站好,营销手段和技巧,网站服务器干啥,简约中国风免费ppt模板目录 前言 一、硬件元器件介绍 1.舵机 2.直流电机驱动 二、C语言编程步骤 1.开启时钟 2.配置输出的GPIO口 3.配置时基单元 4.初始化输出比较通道 5.开启定时器 三、实践项目 1.PWM驱动LED呼吸灯 2.PWM驱动舵机 3.PWM驱动直流电机 前言 本期我们就开始去进行TIM定时…目录 前言 一、硬件元器件介绍 1.舵机 2.直流电机驱动 二、C语言编程步骤 1.开启时钟 2.配置输出的GPIO口 3.配置时基单元 4.初始化输出比较通道 5.开启定时器 三、实践项目 1.PWM驱动LED呼吸灯 2.PWM驱动舵机 3.PWM驱动直流电机 前言 本期我们就开始去进行TIM定时器的输出比较功能的实操了如果有什么疑惑的可以去看一下上一期理论的知识点上一期链接stm32入门-----TIM定时器PWM输出比较——上-CSDN博客这里就分为三个部分的项目分别是PWM驱动LED呼吸灯PWM驱动直流电机转动和PWM驱动舵机。视频[6-4] PWM驱动LED呼吸灯PWM驱动舵机PWM驱动直流电机_哔哩哔哩_bilibili 一、硬件元器件介绍 1.舵机 舵机是一种根据输入PWM信号占空比来控制输出角度的装置   输入PWM信号要求周期为20ms高电平宽度为0.5ms~2.5ms 舵机里面本身就是有一个驱动电路板的所以我们只需要给这个舵机通上电以及输入PWM波形就可以控制这个舵机了内部电路结构就不需要多去了解。根据输入信号的高电平占比不同舵机就会转动不同的角度舵机不是一直转动的当且仅当输入信号PWM发生改变的时候才会转动转动就之转一定角度转玩了就保持静止状态。 电路图 2.直流电机驱动 直流电机是一种将电能转换为机械能的装置有两个电极当电极正接时电机正转当电极反接时电机反转直流电机属于大功率器件GPIO口无法直接驱动需要配合电机驱动电路来操作TB6612是一款双路H桥型的直流电机驱动芯片可以驱动两个直流电机并且控制其转速和方向 由于直流电机不像舵机那样有驱动电路所以我们需要外接一个驱动电路的芯片这里我们就选择TB6612来驱动直流电机驱动芯片不知这一种还是有挺多的比如L298这个还是挺常见的。 TB6612驱动是双路的分为AO和BO口下面电路图展示了这个驱动电路的接线方式VM是用来接外接电源的这个可以给到高电压的电源这个驱动电路可以实现低电压PWM信号驱动高电压电机AIN2AIN1是表示转动的方向PWMA是表示输入的PWM信号。 硬件电路 二、C语言编程步骤 看到下图的流程我们只需要把这些通路给打开就行了这样就可以实现定时器的输出比较功能。 1.开启时钟 时钟包括定时器的时钟和GPIO口的输出时钟 //1.开启定时器时钟TIM2总线是为APB1的RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);TIM_InternalClockConfig(TIM2); //给TIM2选择时钟 为内部时钟定时器默认是使用内部的时钟不写这一行也行的2.配置输出的GPIO口 //2.配置GPIO口, PA0 为输出口GPIO_InitTypeDef GPIO_initstruct; GPIO_initstruct.GPIO_ModeGPIO_Mode_AF_PP; //使用复用推挽输出因为这里不是输出寄存器控制的是片上外设定时器操作的所以要用到复用推挽输出GPIO_initstruct.GPIO_PinGPIO_Pin_0; GPIO_initstruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_initstruct); 3.配置时基单元 PWM频率  Freq CK_PSC / (PSC  1) / (ARR  1)PWM占空比  Duty CCR / (ARR  1)PWM分辨率  Reso 1 / (ARR  1) 根据上面这些公式我们来去计算出想要的波形效果再去进行配置。  //3.配置时基单元TIM_TimeBaseInitTypeDef TIM_timebasestruct;//下面两个是运行控制操作值TIM_timebasestruct.TIM_ClockDivisionTIM_CKD_DIV1;//对输入信号进行初步分频内部时钟72Mhz信号TIM_timebasestruct.TIM_CounterModeTIM_CounterMode_Up;//计数方式选择向上计数//以下三个是时基单元里面的实际参数值/* 计数器溢出频率CK_CNT_OV CK_CNT / (ARR 1) CK_PSC / (PSC 1) / (ARR 1) */TIM_timebasestruct.TIM_Period100-1; //计数器的重装值目标值 ARRTIM_timebasestruct.TIM_Prescaler720-1; //预分频器的值 PSCTIM_timebasestruct.TIM_RepetitionCounter0;//重复计数功能这个是高级计数器才有的当前选择的是通用计数器设置0即可TIM_TimeBaseInit(TIM2,TIM_timebasestruct); 4.初始化输出比较通道 //4.初始化输出比较通道,这里以OC1通道为示例TIM_OCInitTypeDef TIM_ocinitstruct;//配置输出比较通道结构体TIM_OCStructInit(TIM_ocinitstruct);//给这个结构体设置默认初始值避免改为使用高级定时器的时候出错//下面是使用通用定时器的部分就拉出来单独修改其余是高级定时器的东西就不去改保持默认值就行了TIM_ocinitstruct.TIM_OCModeTIM_OCMode_PWM1;//PWM选择输出比较工作模式八选一TIM_ocinitstruct.TIM_OCPolarityTIM_OCPolarity_High;//选择输出极性当ref为高电平的时候就输出保持不变还有其他两种一个是低电平另一个是翻转TIM_ocinitstruct.TIM_OutputStateTIM_OutputState_Enable;//输出使能开启输出比较通道使能TIM_ocinitstruct.TIM_Pulse0; //CCR的初始值我们要去进行比较的数TIM_OC1Init(TIM2,TIM_ocinitstruct); 已知是使用内部定时器频率72MHz 这里我们可以计算出输出波形的频率为72MHz / 720*100100Hz PWM占空比0 / 100 0当前初始值为0的 5.开启定时器 //5.开启定时器TIM_Cmd(TIM2,ENABLE);//开启定时器 三、实践项目 本次项目的代码都在百度网盘可自行下载。 链接https://pan.baidu.com/s/10fNUjkPm1WmvSoK0gkCiRA?pwd0721  提取码0721 1.PWM驱动LED呼吸灯 先看现象 LED呼吸灯 电路连接图 项目文件 PWM.c代码 #include stm32f10x.h // Device headervoid PWM_init(){//1.开启定时器时钟TIM2总线是为APB1的RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);TIM_InternalClockConfig(TIM2); //给TIM2选择时钟 为内部时钟定时器默认是使用内部的时钟不写这一行也行的// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);//设置重映射//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //解除像PA15,PB3,PB4 这些端口的调试功能变为普通的GPIO//2.配置GPIO口, PA0 为输出口GPIO_InitTypeDef GPIO_initstruct; GPIO_initstruct.GPIO_ModeGPIO_Mode_AF_PP; //使用复用推挽输出因为这里不是输出寄存器控制的是片上外设定时器操作的所以要用到复用推挽输出GPIO_initstruct.GPIO_PinGPIO_Pin_0; //重新映射到15口 GPIO_initstruct.GPIO_PinGPIO_Pin_15;GPIO_initstruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_initstruct);//3.配置时基单元TIM_TimeBaseInitTypeDef TIM_timebasestruct;//下面两个是运行控制操作值TIM_timebasestruct.TIM_ClockDivisionTIM_CKD_DIV1;//对输入信号进行初步分频内部时钟72Mhz信号TIM_timebasestruct.TIM_CounterModeTIM_CounterMode_Up;//计数方式选择向上计数//以下三个是时基单元里面的实际参数值/* 计数器溢出频率CK_CNT_OV CK_CNT / (ARR 1) CK_PSC / (PSC 1) / (ARR 1) */TIM_timebasestruct.TIM_Period100-1; //计数器的重装值目标值 ARRTIM_timebasestruct.TIM_Prescaler720-1; //预分频器的值 PSCTIM_timebasestruct.TIM_RepetitionCounter0;//重复计数功能这个是高级计数器才有的当前选择的是通用计数器设置0即可TIM_TimeBaseInit(TIM2,TIM_timebasestruct);//4.初始化输出比较通道,这里以OC1通道为示例TIM_OCInitTypeDef TIM_ocinitstruct;//配置输出比较通道结构体TIM_OCStructInit(TIM_ocinitstruct);//给这个结构体设置默认初始值避免改为使用高级定时器的时候出错//下面是使用通用定时器的部分就拉出来单独修改其余是高级定时器的东西就不去改保持默认值就行了TIM_ocinitstruct.TIM_OCModeTIM_OCMode_PWM1;//PWM选择输出比较工作模式八选一TIM_ocinitstruct.TIM_OCPolarityTIM_OCPolarity_High;//选择输出极性当ref为高电平的时候就输出保持不变还有其他两种一个是低电平另一个是翻转TIM_ocinitstruct.TIM_OutputStateTIM_OutputState_Enable;//输出使能开启输出比较通道使能TIM_ocinitstruct.TIM_Pulse0; //CCR的值我们要去进行比较的数TIM_OC1Init(TIM2,TIM_ocinitstruct);//5.开启定时器TIM_Cmd(TIM2,ENABLE);//开启定时器}//寄存器设置CCR的值我们要去进行比较的数 void PWM_Setcompare1(uint16_t Compare){TIM_SetCompare1(TIM2,Compare);}PWM.h代码: #ifndef __PWM_H #define __PWM_Hvoid PWM_init(); void PWM_Setcompare1(uint16_t Compare); #endif // !1 main.c代码 #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include PWM.hint main(void) { LED_init();OLED_Init();PWM_init();OLED_ShowString(1,1,jjjjj:);uint8_t i;while(1){for(i0;i100;i){PWM_Setcompare1(i);Delay_ms(10);}for(i0;i100;i){PWM_Setcompare1(100-i);Delay_ms(10);}} } 2.PWM驱动舵机 现象 PWM驱动舵机 实际电路连接图 项目文件 其中Servo.c和Servo.h文件是用来封装PWM的。 PWM.c代码 #include stm32f10x.h // Device headervoid PWM_init(){//1.开启定时器时钟TIM2总线是为APB1的RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置GPIO口 PA0GPIO_InitTypeDef GPIO_initstruct; GPIO_initstruct.GPIO_ModeGPIO_Mode_AF_PP; //使用复用推挽输出因为这里不是输出寄存器控制的是片上外设定时器操作的所以要用到复用推挽输出GPIO_initstruct.GPIO_PinGPIO_Pin_1; //重新映射到15口 GPIO_initstruct.GPIO_PinGPIO_Pin_15;GPIO_initstruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_initstruct);TIM_InternalClockConfig(TIM2); //给TIM2选择时钟 为内部时钟定时器默认是使用内部的时钟不写这一行也行的//2.配置时基单元TIM_TimeBaseInitTypeDef TIM_timebasestruct;//下面两个是运行控制操作值TIM_timebasestruct.TIM_ClockDivisionTIM_CKD_DIV1;//对输入信号进行初步分频内部时钟72Mhz信号TIM_timebasestruct.TIM_CounterModeTIM_CounterMode_Up;//计数方式选择向上计数//以下三个是时基单元里面的实际参数值/* 计数器溢出频率CK_CNT_OV CK_CNT / (ARR 1) CK_PSC / (PSC 1) / (ARR 1) */TIM_timebasestruct.TIM_Period20000-1; //计数器的重装值目标值 //ARRTIM_timebasestruct.TIM_Prescaler72-1; //预分频器的值 //PSCTIM_timebasestruct.TIM_RepetitionCounter0;//重复计数功能这个是高级计数器才有的当前选择的是通用计数器设置0即可TIM_TimeBaseInit(TIM2,TIM_timebasestruct);//初始化输出比较通道,这里以OC1通道为示例TIM_OCInitTypeDef TIM_ocinitstruct;//配置输出比较通道结构体TIM_OCStructInit(TIM_ocinitstruct);//给这个结构体设置默认初始值避免改为使用高级定时器的时候出错//下面是使用通用定时器的部分就拉出来单独修改其余是高级定时器的东西就不去改保持默认值就行了TIM_ocinitstruct.TIM_OCModeTIM_OCMode_PWM1;//PWM选择输出比较工作模式八选一TIM_ocinitstruct.TIM_OCPolarityTIM_OCPolarity_High;//选择输出极性当ref为高电平的时候就输出保持不变还有其他两种一个是低电平另一个是翻转TIM_ocinitstruct.TIM_OutputStateTIM_OutputState_Enable;//输出使能开启输出比较通道使能TIM_ocinitstruct.TIM_Pulse0; //CCR的值我们要去进行比较的数//如果想使用多个通道输出同样的波形话把下面这个初始化复制粘贴改变通道名称就行了/*同一个定时器输出多个PWM通道是满足 相位一致性CCR是可以各自设置的波形的占空比可自定义*/TIM_OC2Init(TIM2,TIM_ocinitstruct);//5.开启定时器TIM_Cmd(TIM2,ENABLE);//开启定时器}//寄存器设置CCR的值我们要去进行比较的数 void PWM_Setcompare2(uint16_t Compare){TIM_SetCompare2(TIM2,Compare);}PWM.h代码 #ifndef __PWM_H #define __PWM_H void PWM_init(); void PWM_Setcompare2(uint16_t Compare); #endif // !1 Servo.c代码 #include PWM.hvoid Servo_init(){PWM_init();}void Servo_setangle(float angle){PWM_Setcompare2(angle/180*2000500);}Servo.h代码 #ifndef __SERVO_H #define __SERVO_H void Servo_init(); void Servo_setangle(float angle); #endif // !__SERVO_Hmain.c代码 #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include Key.h #include Servo.huint8_t keynum; float angle; int main(void) { OLED_Init();Servo_init();Key_init();OLED_ShowString(1,1,angle:);Servo_setangle(90);while(1){keynumKeynum();if(keynum1){angle30;if(angle180)angle0;}Servo_setangle(angle);OLED_ShowNum(1,7,angle,3);}} 3.PWM驱动直流电机 现象 直流电机​​​​​ 电路连接图 项目主要文件 同样的Motor.c 和 Motor.h 文件是用来封装的。 PWM.c代码 #include stm32f10x.h // Device headervoid PWM_init(){//1.开启定时器时钟TIM2总线是为APB1的RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置GPIO口 PA0GPIO_InitTypeDef GPIO_initstruct; GPIO_initstruct.GPIO_ModeGPIO_Mode_AF_PP; //使用复用推挽输出因为这里不是输出寄存器控制的是片上外设定时器操作的所以要用到复用推挽输出GPIO_initstruct.GPIO_PinGPIO_Pin_2; //重新映射到15口 GPIO_initstruct.GPIO_PinGPIO_Pin_15;GPIO_initstruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_initstruct);TIM_InternalClockConfig(TIM2); //给TIM2选择时钟 为内部时钟定时器默认是使用内部的时钟不写这一行也行的//2.配置时基单元TIM_TimeBaseInitTypeDef TIM_timebasestruct;//下面两个是运行控制操作值TIM_timebasestruct.TIM_ClockDivisionTIM_CKD_DIV1;//对输入信号进行初步分频内部时钟72Mhz信号TIM_timebasestruct.TIM_CounterModeTIM_CounterMode_Up;//计数方式选择向上计数//以下三个是时基单元里面的实际参数值/* 计数器溢出频率CK_CNT_OV CK_CNT / (ARR 1) CK_PSC / (PSC 1) / (ARR 1) */TIM_timebasestruct.TIM_Period100-1; //计数器的重装值目标值 //ARRTIM_timebasestruct.TIM_Prescaler36-1; //预分频器的值 //PSCTIM_timebasestruct.TIM_RepetitionCounter0;//重复计数功能这个是高级计数器才有的当前选择的是通用计数器设置0即可TIM_TimeBaseInit(TIM2,TIM_timebasestruct);//初始化输出比较通道,这里以OC1通道为示例TIM_OCInitTypeDef TIM_ocinitstruct;//配置输出比较通道结构体TIM_OCStructInit(TIM_ocinitstruct);//给这个结构体设置默认初始值避免改为使用高级定时器的时候出错//下面是使用通用定时器的部分就拉出来单独修改其余是高级定时器的东西就不去改保持默认值就行了TIM_ocinitstruct.TIM_OCModeTIM_OCMode_PWM1;//PWM选择输出比较工作模式八选一TIM_ocinitstruct.TIM_OCPolarityTIM_OCPolarity_High;//选择输出极性当ref为高电平的时候就输出保持不变还有其他两种一个是低电平另一个是翻转TIM_ocinitstruct.TIM_OutputStateTIM_OutputState_Enable;//输出使能开启输出比较通道使能TIM_ocinitstruct.TIM_Pulse0; //CCR的值我们要去进行比较的数TIM_OC3Init(TIM2,TIM_ocinitstruct);//5.开启定时器TIM_Cmd(TIM2,ENABLE);//开启定时器}//寄存器设置CCR的值我们要去进行比较的数 void PWM_Setcompare3(uint16_t Compare){TIM_SetCompare3(TIM2,Compare);}PWM.h代码 #ifndef __PWM_H #define __PWM_Hvoid PWM_init(); void PWM_Setcompare3(uint16_t Compare); #endif // !1 Motor.c代码 #include stm32f10x.h // Device header #include PWM.hvoid Motor_init() {//电机方向控制脚RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_initstruct; GPIO_initstruct.GPIO_ModeGPIO_Mode_Out_PP; GPIO_initstruct.GPIO_PinGPIO_Pin_4 | GPIO_Pin_5;GPIO_initstruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_initstruct);PWM_init(); }//设置速度 void Motor_setspeed(int8_t speed){//正转if(speed0){GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_ResetBits(GPIOA,GPIO_Pin_5);PWM_Setcompare3(speed);}//反转else{GPIO_SetBits(GPIOA,GPIO_Pin_5);GPIO_ResetBits(GPIOA,GPIO_Pin_4);PWM_Setcompare3(-speed);} } Motor.h代码 #ifndef __MOTOR_H #define __MOTOR_H void Motor_init(); void Motor_setspeed(int8_t speed); #endif // !__MOTOR_Hmain.c代码 #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include Key.h #include Motor.h #include LED.huint8_t keynum; int speed;int main(void) { Key_init();OLED_Init();Motor_init();LED_init();OLED_ShowString(1,1,speed:);OLED_ShowString(2,1,state:);while(1){keynumKeynum();OLED_ShowSignedNum(1,8,speed,3);if(speed0){LED1_ON();OLED_ShowString(2,7,Posi);}else if(speed0){LED1_OFF();OLED_ShowString(2,7,Rest);}else{LED1_ON();OLED_ShowString(2,7,Oppo);}if(keynum1){ //调档占空比分百分之 0 25 50 75 100 speed25;if(speed100)speed0;}if(keynum2){ //调方向按下就按照原来的速度反方向转speed-speed;}Motor_setspeed(speed);} } 以上就是本期的全部内容了我们下次见 每日壁纸
http://www.hkea.cn/news/14258906/

相关文章:

  • 火车头自动上传wordpress嘉兴关键词优化报价
  • dede模板 展柜网站源码怎么做网站的搜索引擎
  • 司法局网站开发方案对企业网站建设的建议
  • 深圳网站制作济南惠州市seo上词
  • 四川网站建设培训软件外包专业
  • 化工建设网站长尾关键词排名推广
  • 网站改版是否有影响中国石化工程建设有限公司设计许可证编号
  • 制作网站首页wordpress用户名在哪看
  • 怎样做美食网站西安软件制作公司
  • 网站内页检测做暑假工的网站
  • 辽宁网站seoai制作网页教程
  • 什么网站做推广最好网站八个
  • 徐州网站wordpress 高级选项
  • 节点网站洛阳公司注册
  • 有没有做网站的随州网站开发的背景知识
  • 网站建设与管理维护 李建青wordpress整站搬家首页空白问题
  • 软件开发和网站开发难度网站返回指定位置怎么做
  • zhihe网站建设 淘宝建立充电站需要多少钱
  • 个性化网站猎头公司的原则是
  • 中国平面设计和网站建设福州专业建站
  • 科技公司建设网站公司那个网站做二手设备比较好
  • 专业企业网站设计网络公司wordpress 导航标签
  • 设计企业网站步骤深圳商城网站设计价格
  • wordpress怎么修改首页网址西昌seo
  • 做网站销售提成怎么算网站建设 翰臣科技
  • 安徽网站建设首选-晨飞网络网站建设项目可行性报告
  • 软件技术跟网站开发有关系吗网站集约化建设优点
  • 网站风格细节网络设计的专业有哪些
  • 优设网网站企业文化建设的重要性
  • 哪个网络公司做网站好点偷wordpress模板