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

甘肃做网站营销渠道策略有哪些

甘肃做网站,营销渠道策略有哪些,网站建设 手机app,番禺建设网站外包文章目录 输出比较PWM输出比较通道参数计算舵机简介直流电机简介TB6612 PWM基本结构PWM驱动呼吸灯PWM驱动舵机PWM控制电机 输出比较 输出比较,简称OC(Output Compare)。 输出比较的原理是,当定时器计数值与比较值相等或者满足某种…

文章目录

  • 输出比较
  • PWM
  • 输出比较通道
  • 参数计算
  • 舵机简介
  • 直流电机简介
    • TB6612
  • PWM基本结构
  • PWM驱动呼吸灯
  • PWM驱动舵机
  • PWM控制电机

输出比较

输出比较,简称OC(Output Compare)
输出比较的原理是,当定时器计数值与比较值相等或者满足某种特定条件时,比较通道会产生一个输出信号,这个输出信号可以用来触发外部事件,如控制其他外设的操作,或者驱动外部电路
在每个高级定时器和通用定时器都拥有4个输出比较通道。
高级定时器的前3个通道额外拥有死区生成和互补输出的功能。

PWM

我们可以利用输出比较来对外产生一个PWM频率。
PWM(Pulse Width Modulation)脉冲宽度调制是一种常用的控制信号技术。通过改变信号的脉冲宽度来控制电力开关装置的平均功率。在PWM中,周期保持不变,而脉冲的宽度可以根据需要进行调整。
PWM技术广泛应用于电力电子领域,特别是在电机控制和电源调节方面。通过调整PWM信号的占空比(脉冲宽度与周期之比),可以精确地控制输出信号的平均电压或电流。这种控制方式可以实现对电机速度、亮度、电压等参数的精确控制,具有高效率、高精度和低成本的优点。
在这里插入图片描述
频率=1/Ts;占空比=Ton/Ts;分辨率=占空比的变化步距。
我们可以利用输出比较,对输出电平进行一定程度的控制,就能输出PWM频率。

输出比较通道

通用定时器总框图。
在这里插入图片描述

放大效果:
在这里插入图片描述
在比较通道左边,CNT计数器与捕获/比较寄存器中的值进行比较大小,再根据控制器,就会输出一定的电平。
ETRF是定时器的小功能,一般不用到。
REF(rreference)实际上就是指这里信号的高低电平。REF可以映射到主模式的TRGO输出上去;REF的主要去向是去到输出使能电路,它会先走向一个寄存器,如果寄存器输出为0,那么电平将不翻转,保持原样;如果信号为1,REF会通向一个非门取反,也就是高低电平翻转的信号;接着通过使能电路,将有一个寄存器(CC1E)控制;最后到OC1引脚,接到CH1通道上。
输出模式控制器,可以根据自己需求来选择模式:
在这里插入图片描述

参数计算

在这里插入图片描述
红色线表示CCR,也就是比较值;黄色线表示自动装载寄存器中的值(ARR);蓝色线表示计数值CNT;
当CNT<CCR时,输出高电平;当CNT>=CCR时,输出低电平。
这里对应的是PWM模式1的向上计数

PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)
PWM占空比: Duty = CCR / (ARR + 1)
PWM分辨率: Reso = 1 / (ARR + 1)

舵机简介

舵机(Servo)是一种常用的电动执行器,通常用于控制机械运动和定位定位。它由一个直流电机、减速装置、位置反馈装置和控制电路组成。
舵机的工作原理是控制电路根据输入信号生成特定的PWM信号,并驱动直流电机和减速装置运转,使输出轴转动到所需的位置。位置反馈装置(常用的是旋转式电位器)会实时监测输出轴的位置,并将信息反馈给控制电路,以便进行修正和精确控制。

SG90使用要求:输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms

在这里插入图片描述
硬件电路:
在这里插入图片描述

直流电机简介

直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。
直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作。
在这里插入图片描述

TB6612

TB6612是一款双路H桥型的直流电机驱动芯片,常用于控制直流电机的转动方向和速度。它具有高效率、低功耗和高输出等特点,适用于各种电机驱动应用。
TB6612芯片内部集成了H桥驱动电路,可通过控制引脚实现正转、反转、制动和浮动等操作。它可以工作于3.3V或5V逻辑电平,支持PWM输入控制电机速度,并提供过流保护功能,防止电机过载。

硬件电路:
在这里插入图片描述
在这里插入图片描述

PWM基本结构

在这里插入图片描述
通过配置时基单元,,让计时器驱动与CCR比较,在PWM模式1下输出电平最后通向GPIO口。

PWM驱动呼吸灯

接线模式:
在这里插入图片描述
PWM.h

#ifndef __PWM_H__
#define __PWM_H__void PWM_Init();
void PWM_SetCompare(uint16_t Compare);#endif

PWM.c

#include "stm32f10x.h"                  // Device headervoid PWM_Init()
{//开启APB1外设开关RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//配置内部时钟TIM2TIM_InternalClockConfig(TIM2);//时钟结构体初始化TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //不分频TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //计时器模式TIM_TimeBaseInitStructure.TIM_Period=100-1; //自动加载寄存器周期值TIM_TimeBaseInitStructure.TIM_Prescaler=1-1; //预分频值TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0; //指定重复计时器的值,这里不用到TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);//配置输出比较结构体TIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCStructInit(&TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //配置输出比较模式TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //指定输出极性TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//输出比较状态TIM_OCInitStructure.TIM_Pulse=0; //指定要捕获的脉冲值CCRTIM_OC1Init(TIM2,&TIM_OCInitStructure);//启用TIM2外设控制TIM_Cmd(TIM2,ENABLE);}
//设置CCR比较值
void PWM_SetCompare(uint16_t Compare)
{TIM_SetCompare1(TIM2,Compare);
}

对于GPIO口来说,不止是接通了外设,还需要将PWM频率传输给外设,所以使用了复用推挽输出。
输出比较结构体有多个成员,我们这里一些成员不用到,所以先进行结构体初始化,再进行对一些成员的赋值。

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "PWM.h"uint16_t i;int main()
{OLED_Init();PWM_Init();while(1){for(i=0;i<=100;i++){PWM_SetCompare(i);Delay_ms(10);}for(i=0;i<=100;i++){PWM_SetCompare(100-i);Delay_ms(10);}}
}

PWM驱动舵机

OLED函数所取地址

连接方式:
在这里插入图片描述
SYTM32驱动电压只有3.3V,舵机需要5V的驱动电压;

Servo.c

#include "stm32f10x.h"                  // Device header
#include "PWM.h"void Servo_Init()
{PWM_Init();
}void Servo_SetAngle(float Angle)
{PWM_SetCompare(Angle/180*200+50);
}

Servo.h

#ifndef __SERVO_H__
#define __SERVO_H__void Servo_Init();
void Servo_SetAngle(float Angle);#endif

这里的PWM频率是有要求的,所以需要将PWM.c的CNT和ARR进行修改:频率=72M/720/2000=50Hz
在这里插入图片描述
这里的转动度数需要根据占空比来进行计算:
在这里插入图片描述
Key.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"void Key_Init(void)
{//设置APB2外设时钟开关RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//对结构体成员的选择GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//结构体初始化GPIO_Init(GPIOB, &GPIO_InitStructure);
}//获取键码
uint8_t Key_GetNum(void)
{uint8_t KeyNum = 0;if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0){Delay_ms(20);while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);Delay_ms(20);KeyNum = 1;}if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){Delay_ms(20);while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);Delay_ms(20);KeyNum = 2;}return KeyNum;
}

Key.h

#ifndef __KEY_H_
#define __KEY_H_void Key_Init(void);
uint8_t Key_GetNum(void);#endif

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Servo.h"
#include "Key.h"
uint16_t angle;
int main()
{OLED_Init();Servo_Init();Key_Init();OLED_ShowString(1,1,"Angle:");while(1){if(Key_GetNum()==1){angle+=30;if(angle>180){angle=0;}}Servo_SetAngle(angle);OLED_ShowNum(1,7,angle,3);}}

PWM控制电机

接线方式:
在这里插入图片描述
Motor.h

#ifndef __MOTOR_H__
#define __MOTOR_H__void Motor_init();
void Motor_GetSpeed(int8_t Speed);#endif 

Motor.c

#include "stm32f10x.h"                  // Device header
#include "PWM.h"void Motor_init()
{//设置APB2外设时钟开关RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//对结构体成员的选择GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//结构体初始化GPIO_Init(GPIOA, &GPIO_InitStructure);PWM_Init();
}
//速度输入函数
void Motor_GetSpeed(int8_t Speed)
{if(Speed>=0){GPIO_SetBits(GPIOA,GPIO_Pin_5);GPIO_ResetBits(GPIOA,GPIO_Pin_4);PWM_SetCompare(Speed);}else{GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_ResetBits(GPIOA,GPIO_Pin_5);PWM_SetCompare(-Speed);}
}

PWM的占空比作为速度的调节,两个接口的正反接作为方向的控制。
对于电机驱动电路所接引脚,需要进行GPIO口的初始化;
当输入速度为负时,将接口上引脚进行电平翻转,读者可以进行尝试,怎么接为正,怎么接为负;对于小于0的速度,需要加上符号变成正数。

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Motor.h"
#include "Key.h"
int8_t Speed;
int main()
{OLED_Init();Motor_init();Key_Init();OLED_ShowString(1,1,"Speed:");while(1){if(Key_GetNum()==1){Speed+=20;if(Speed>100){Speed=-100;}}Motor_GetSpeed(Speed);OLED_ShowSignedNum(1,7,Speed,3);} 
}
http://www.mmbaike.com/news/105080.html

相关文章:

  • 做网站设计工资多少钱网络推广应该怎么做啊
  • iis日志 网站攻击怎么自己做网站推广
  • 纯静态网站怎么做连接友谊
  • 厦门做网站培训足球比赛直播2021欧冠决赛
  • 特乐网站建设免费推广seo
  • 个人做网站的时代已经过去大一html网页制作作业
  • 商业网站的建设与制作地推接单平台app排行榜
  • 网站的锚点链接怎么做百度推广是什么
  • 安卓开发培训seo建设招商
  • 做暧暖ox免费网站排名网
  • 山东网站建设公司哪家专业百度人工
  • 网站的站点建设销售推广的方法都有哪些
  • 在linux系统上用什么做网站安卓优化
  • 飞狐小说网站建设吉安seo
  • 网站域名可以改吗推广优化网站排名
  • 做网站单线程CPU和多线程cpu济南seo优化外包服务公司
  • 乐清建网站百度推广售后
  • 做网站还能挣钱国内高清视频素材网站推荐
  • 嘉兴做营销型网站设计中国搜索引擎市场份额
  • 网站建设源码一诺网络推广公司
  • 做垃圾网站可行吗百度云盘网官网
  • 网站策划岗位职责sem竞价推广怎么做
  • 文明农村建设网站小红书推广策略
  • 长春网站制作长春万网seo是一种利用搜索引擎的
  • 长春网站排名优化公司排名优化哪家专业
  • 网站 二级分类今日的最新消息
  • 如何做好一个购物网站aso推广方案
  • 网站开发四点注意事项seo营销培训
  • 做网站资料准备什么廊坊快速优化排名
  • 哪个网站可以做代练bt兔子磁力天堂