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

一家专做二手手机的网站叫什么手机网站开发与建设的原则

一家专做二手手机的网站叫什么手机,网站开发与建设的原则,东莞网站设计公司有哪些,兼职做网站的费用这个电机驱动的接口电路主要包括以下部分: 电源供给‌:由VCC和GND提供必要的电源电压,C37(100nF)和C38(10uF)电容用于稳定电源电压,减少波动。 控制信号输入‌:‌PA8‌…

 

这个电机驱动的接口电路主要包括以下部分:

电源供给‌:由VCC和GND提供必要的电源电压,C37(100nF)和C38(10uF)电容用于稳定电源电压,减少波动。

控制信号输入‌:‌PA8‌和‌PA11‌作为控制信号源,通过1kΩ的电阻R49和R50分别连接到电机驱动器U21的‌PB6‌和‌PB7‌引脚,用于控制电机的运行状态。

电机驱动核心‌:U21为电机驱动器,其‌OUT1‌和‌OUT2‌输出端直接连接到电机的两个接线端,通过改变这两个端口的电平状态,实现电机的正转、反转或停止。

手动开关控制‌:SK1开关用于手动控制整个电路的通断,从而实现对电机启动和停止的直接操作。

  1. 电阻网络(R49-R52)

    • 分压作用‌:将U21的输出电压按比例衰减,适配下游引脚(如MCU的ADC输入范围)。计算公式为:
      Vout=Vin×RlowerRupper+RlowerVout​=Vin​×Rupper​+Rlower​Rlower​​
      例如:若R49=10kΩ、R50=10kΩ,则PA8获得OUT1一半的电压。‌34
    • 限流保护‌:防止开关切换时瞬间电流冲击损坏U21或下游元件。‌9
  2. 滤波电容(C37, C38)

    • C37 (100nF)‌:滤除高频噪声(如开关抖动或电磁干扰),提升信号稳定性。
    • C38 (10μF)‌:抑制低频纹波,稳定供电电压,防止负载突变导致电压波动。‌56
      二者组合形成宽频带滤波网络。

#include "sys.h"
#include "encoder.h"/**************************************************************************
函数功能:编码器初始化函数 PB6 PB7
入口参数:无
返回  值:无
**************************************************************************/
void MotorEncoder_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure; //定义一个引脚初始化的结构体  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义一个定时器初始化的结构体TIM_ICInitTypeDef TIM_ICInitStructure; //定义一个定时器编码器模式初始化的结构体RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能TIM4时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能CPIOB时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;	//TIM4_CH1、TIM4_CH2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOB, &GPIO_InitStructure);	//根据GPIO_InitStructure的参数初始化GPIOTIM_TimeBaseStructure.TIM_Period = 0xffff; //设定计数器自动重装值TIM_TimeBaseStructure.TIM_Prescaler = 0; // 预分频器 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //选择时钟分频:不分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct的参数初始化定时器TIM4TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); //使用编码器模式3:CH1、CH2同时计数,为四分频TIM_ICStructInit(&TIM_ICInitStructure); //把TIM_ICInitStruct 中的每一个参数按缺省值填入TIM_ICInitStructure.TIM_ICFilter = 10;  //设置滤波器长度TIM_ICInit(TIM4, &TIM_ICInitStructure); //根TIM_ICInitStructure参数初始化定时器TIM4编码器模式TIM_ClearFlag(TIM4, TIM_FLAG_Update);//清除TIM的更新标志位TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); //更新中断使能TIM_SetCounter(TIM4,0); //初始化清空编码器数值TIM_Cmd(TIM4, ENABLE); //使能定时器4
}
/**************************************************************************
函数功能:读取TIM4编码器数值
入口参数:无
返回  值:无
**************************************************************************/
int Read_Encoder(void)
{//static long int CNT_START=0, CNT_END=0;int Encoder_TIM;Encoder_TIM=(short)TIM4->CNT; //读取计数if(Encoder_TIM>0xefff)Encoder_TIM=Encoder_TIM-0xffff-1; //转化计数值为有方向的值,大于0正转,小于0反转。TIM4->CNT=0; //读取完后计数清零return Encoder_TIM; //返回值
}

 

电机编码器信号采集,指的是通过硬件(如定时器)和软件配合,把电机编码器输出的脉冲信号实时、准确地转换为电机的转速或位置数据。下面详细解释:


1. 编码器信号采集是什么意思?

  • 编码器是一种安装在电机轴上的传感器,能输出与电机旋转相关的脉冲信号(通常为A/B两路正交信号)。
  • 信号采集就是把这些脉冲信号通过MCU(如STM32)的定时器捕获,转换为数字量,进而计算电机的转速、转向和位置。

2. 规则是什么?

  • 硬件规则:编码器A/B两路信号接到定时器的输入通道(如TIM4的CH1/CH2),定时器配置为编码器接口模式(四倍频),自动计数。
  • 软件规则
    • 每隔固定周期读取一次定时器的计数值(CNT),得到本周期内的脉冲数(即电机转过的“步数”)。
    • 读取后立即清零计数器,保证下次读取的是增量。
    • 若计数值溢出(如超过0xefff),做符号转换,确保正反转都能正确识别。

3. 为什么要这么设计?

  • 高效:利用硬件定时器自动计数,CPU负担小,实时性强。
  • 高精度:四倍频计数,能捕获高速旋转下的每一个脉冲,精度高。
  • 方向识别:正交信号能区分正反转,计数值正负表示旋转方向。
  • 防止溢出:每次读取后清零,避免长时间运行导致计数溢出。
  • 便于控制:实时获得电机运动信息,便于LADRC等控制算法进行闭环调节。

 

1. MotorEncoder_Init 函数

功能:初始化TIM4为编码器接口模式,配置相关GPIO和定时器参数。

主要步骤

  • 使能TIM4和GPIOB的时钟。
  • 配置PB6、PB7为浮空输入(TIM4的CH1、CH2通道)。
  • 配置TIM4定时器参数(自动重装值0xffff,向上计数,无分频)。
  • 配置TIM4为编码器接口模式(TI12,双通道,四倍频,正交编码器常用)。
  • 设置输入捕获滤波器,抗干扰。
  • 清除更新中断标志,开启更新中断。
  • 计数器清零,启动定时器。

2. Read_Encoder 函数

功能:读取编码器计数值,转换为有符号增量,并清零计数器。

主要步骤

  • 读取TIM4->CNT(当前计数值,short类型,防止溢出)。
  • 若计数值大于0xefff(接近上限),做溢出处理,转换为负值(支持正反转)。
  • 读取后将计数器清零,便于下次读取增量。
  • 返回本周期的编码器增量。

3. 应用场景

  • 适用于直流/步进电机的转速、位置闭环控制。
  • 结合LADRC等控制算法,可实现高精度运动控制。

4. 关键点说明

  • 编码器模式:TIM_EncoderMode_TI12,支持正交编码器A/B两路信号,四倍频计数。
  • 滤波器:TIM_ICFilter = 10,有效抑制抖动和干扰。
  • 溢出处理:防止计数器溢出导致的方向错误。
  • 清零:每次读取后清零,便于获取增量。
#include "MOTOR.h"
#include "PWM.h"extern u8 Start;
extern int ARR, PSC;//启动电机
void loadMotor(int pwm)
{if(Start){if(pwm>=0){Motor_antiClock(  pwm  );}else{Motor_Clock( -pwm);}}else{Motor_Clock( 0 );}}void Motor_antiClock(int pwm)
{TIM_SetCompare1(TIM1,  pwm );TIM_SetCompare4(TIM1, 00);}
void Motor_Clock(int pwm)
{TIM_SetCompare1(TIM1, 00 );TIM_SetCompare4(TIM1,  pwm );}void Motor_Init(void)
{//开关频率太高,必然短路	  STM32C8T6_PWM_Init( TIM1,  CH1, GPIOA, GPIO_Pin_8,  ARR, PSC);// 频率1kSTM32C8T6_PWM_Init( TIM1,  CH4, GPIOA, GPIO_Pin_11, ARR, PSC);//频率1k}int myAbs(int x) 
{if (x < 0) {return -x;} else {return x;}
}//限幅函数
int Limit(int x, int MAX)
{if( x>=MAX ){return  MAX;}else if(x<=-MAX){return -MAX;}else{return x;}}

1. 主要功能

  • loadMotor(int pwm)
    电机主控函数,根据pwm值和Start状态决定电机正转、反转或停止。

    • Start为真时,pwm≥0调用Motor_antiClock(反转),pwm<0调用Motor_Clock(正转)。
    • Start为假时,直接停止电机(pwm=0)。
  • Motor_antiClock(int pwm)
    设置定时器通道1输出pwm,占空比控制反转,通道4输出0。

  • Motor_Clock(int pwm)
    设置定时器通道4输出pwm,占空比控制正转,通道1输出0。

  • Motor_Init(void)
    初始化PWM输出,分别配置TIM1的CH1和CH4通道,频率由ARR和PSC决定。

  • myAbs(int x)
    求绝对值函数。

  • Limit(int x, int MAX)
    限幅函数,保证x在[-MAX, MAX]区间内。


2. 设计规则与原理

  • 正反转控制:通过控制两个PWM通道(CH1/CH4)分别输出,保证同一时刻只有一个方向有PWM,防止短路。
  • 启停控制:Start变量决定是否允许电机动作,安全性高。
  • PWM调速:pwm值决定占空比,进而调节电机速度。
  • 限幅保护:Limit函数防止pwm超出硬件允许范围,保护电路和电机。

3. 应用场景

  • 适用于直流电机的速度和方向控制。
  • 可与LADRC等控制算法集成,实现闭环调速。
void STM32C8T6_PWM_Init(TIM_TypeDef* TIMx, u8 CHx, GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin_x,   u16 arr, u16 psc)
{GPIO_InitTypeDef  GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue;TIM_OCInitTypeDef TIM_OCInitTypeStrue;//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO ,ENABLE);if(TIMx==TIM1){RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //ʹ��TIM1��ʱ��ʱ���� }if(TIMx==TIM2){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);	 }if(TIMx==TIM3){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);	  }if(TIMx==TIM4){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);}if(GPIOx==GPIOA){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO ,ENABLE);}if(GPIOx==GPIOB){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO ,ENABLE);}if(GPIOx==GPIOC){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO ,ENABLE);}//�˿ڸ���ΪPWM���ģʽGPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;				 //LED0-->PB.5 �˿�����GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 		 //�����������GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO���ٶ�Ϊ50MHzGPIO_Init(GPIOx, &GPIO_InitStructure);					 //�����趨������ʼ��GPIOB.5//��ʱ����ʼ��TIM_TimeBaseInitStrue.TIM_Period=arr; //�Զ�װ��ֵTIM_TimeBaseInitStrue.TIM_Prescaler=psc;//Ԥ��Ƶϵ��TIM_TimeBaseInitStrue.TIM_CounterMode= TIM_CounterMode_Up;//����ģʽTIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1;//ʱ��ϵ��TclkTIM_TimeBaseInit(TIMx, &TIM_TimeBaseInitStrue);//��ʼ���ȽϺ���TIM_OCInitTypeStrue.TIM_OCMode=TIM_OCMode_PWM1;//PWMģʽ1TIM_OCInitTypeStrue.TIM_OCNPolarity=TIM_OCNPolarity_High; //CNT<CCRΪ�ߵ�ƽTIM_OCInitTypeStrue.TIM_OutputState=TIM_OutputState_Enable;//ʹ��TIM_OCInitTypeStrue.TIM_Pulse = 0;//��ʼ״̬ռ�ձ�Ϊ0if(TIMx==TIM1){//��������Ǹ߼���ʱ�����У����PWM�����TIM_CtrlPWMOutputs(TIM1,ENABLE);  //ȷ����TIM1����PWM}//ͨ��Ԥװ��  �ַ�����switch(CHx){case 1:TIM_OC1Init(TIMx, &TIM_OCInitTypeStrue);//ͨ����ʼ��TIM_OC1PreloadConfig(TIMx, TIM_OCPreload_Enable);break;case 2:TIM_OC2Init(TIMx, &TIM_OCInitTypeStrue);//ͨ����ʼ��TIM_OC2PreloadConfig(TIMx, TIM_OCPreload_Enable);break;case 3:TIM_OC3Init(TIMx, &TIM_OCInitTypeStrue);//ͨ����ʼ��TIM_OC3PreloadConfig(TIMx, TIM_OCPreload_Enable);break;case 4:TIM_OC4Init(TIMx, &TIM_OCInitTypeStrue);//ͨ����ʼ��TIM_OC4PreloadConfig(TIMx, TIM_OCPreload_Enable);break;default:break;}//ʹ�ܶ�ʱ��TIM_Cmd(TIMx,ENABLE);}

1. PWM的作用

PWM(脉宽调制)是一种通过调整高电平占空比来控制电机功率的方法。占空比越大,电机转速越快;占空比为0时,电机停止。


2. 代码实现分析

主要接口

  • STM32C8T6_PWM_Init(TIM1, CH1, GPIOA, GPIO_Pin_8, ARR, PSC)
  • STM32C8T6_PWM_Init(TIM1, CH4, GPIOA, GPIO_Pin_11, ARR, PSC)

这两行代码初始化了TIM1的CH1和CH4通道,分别用于电机的正转和反转PWM输出。
ARR和PSC决定PWM的频率。

PWM输出控制

  • TIM_SetCompare1(TIM1, pwm)
    设置TIM1通道1的比较值,决定CH1的占空比。
  • TIM_SetCompare4(TIM1, pwm)
    设置TIM1通道4的比较值,决定CH4的占空比。

电机正反转

  • Motor_antiClock(int pwm)
    反转:CH1输出pwm,CH4输出0。
  • Motor_Clock(int pwm)
    正转:CH4输出pwm,CH1输出0。

启停与限幅

  • loadMotor(int pwm)
    根据全局变量Start和pwm值,决定电机的启停和转向。
  • Limit(int x, int MAX)
    防止pwm超出允许范围,保护电机和驱动电路。

3. 设计规则

  • 只允许一个通道输出PWM,另一个通道输出0,防止桥臂短路。
  • 通过改变pwm值(占空比)调速,方向由通道选择决定。
  • 频率和分辨率由ARR、PSC参数灵活配置,适应不同电机需求。

可以看到定义PWM为7200-1,那么我的占空比为占7200的分数。 

 int ARR=7200-1, PSC=10-1;  //

 

 

http://www.dtcms.com/a/537698.html

相关文章:

  • 前端可视化工具推荐
  • 建筑网站设计方案手机如何制作网站和网页
  • 鞍山百度做网站网络推广软文怎么写
  • Vue3 响应式系统深度解析:Proxy 为何能替代 Object.defineProperty?
  • 忻州网站建设有些电影网站是怎么做的
  • 兰溪网站建设公司经营性质的网站
  • 项目实践5—全球证件智能识别系统(Qt客户端开发+FastAPI后端人工智能服务开发)
  • 苏州网网站建设企业网站源码带后台
  • 做学术研究的网站惠州市住房和城乡建设厅网站
  • iis应用程序池 网站塘沽网站制作公司
  • 海外网站哪个最好沈阳网站建设58同城
  • ArcGIS Pro与Python下空间数据采集与管理
  • 单片机跑飞原因及解决方法
  • 什么是网站交互全国最大工地招工网
  • 推广网站有哪些平台海外运营工作内容
  • 响应式网站开发 三合一建站备案后修改网站名称
  • 佘山做网站wordpress底部footer
  • 哪个网站做漂流瓶任务做网站外国的
  • 可以做设计赚钱的网站外包公司辞退员工补偿标准
  • 网站共享备案可以申请支付接口网站维护协议
  • 信息技术应用创新 | 基于KylinV10的达梦数据库DM8基本操作
  • 如何租用服务器做网站温州做网站公司
  • 泉州网站开发公司旺道seo软件
  • AOI设备在光伏制造领域的核心应用
  • 网页网站建设的步骤流程图网上搞钱的野路子
  • 安徽池州做企业网站新东方英语线下培训学校
  • 2025年mathorcup大数据竞赛B题【物流理赔风险识别及服务升级问题】原创论文分享
  • EECS 498 Deep Learning for Computer Vision Winter 2022 A2
  • 爱网站站长工具免费网站建设的
  • 从0开始学python(day1)