msp430f5529标准库学习之SG90舵机使用

2023-11-12 00:20

本文主要是介绍msp430f5529标准库学习之SG90舵机使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SG90舵机一般分为180度和360度,他们的控制方法虽然有些不一样,但是实质也是控制pwm占空比来控制转向。

一般蓝色的是180度,另一个就是360度。

引脚说明:

 棕色线        GND

红色线        VCC(5V)

黄色线        PWM输入线

180度舵机控制方法

pwm周期设置为20ms

高电平0.5ms         0 °
高电平1.0ms        45°
高电平1.5ms        90°
高电平2.0ms        135°
高电平2.5ms        180°

但是角度都是固定的,不能同一个方向转动超过180度

360度舵机控制方法

pwm周期设置为20ms

高电平0.5ms        顺时针最大转速;
高电平1.5ms        速度为0;
高电平2.5ms        逆时针最大转速;

相关代码

void tima0_init(uint32_t arr)
{//gpio初始化GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1,GPIO_PIN2);//功能输出引脚//定时器输出pwm初始化Timer_A_outputPWMParam tima0_pwm={0};tima0_pwm.clockSource=TIMER_A_CLOCKSOURCE_SMCLK;//时钟源16*1048576hztima0_pwm.clockSourceDivider=TIMER_A_CLOCKSOURCE_DIVIDER_16;tima0_pwm.compareOutputMode=TIMER_A_OUTPUTMODE_RESET_SET;//复位模式tima0_pwm.compareRegister=TIMER_A_CAPTURECOMPARE_REGISTER_1;//通道1tima0_pwm.dutyCycle=0;//比较值tima0_pwm.timerPeriod=arr;//重装载值Timer_A_outputPWM(TIMER_A0_BASE,&tima0_pwm);
}
//设置系统时钟
void sys_clock_conf(uint16_t dco)
{uint16_t dco_val=0;dco_val=dco*30.5-1;UCSCTL3 = SELREF_2;                       //设置 DCO FLL 引用 = REFOUCSCTL4 |= SELA_2;                        // 设置 ACLK = REFOUCSCTL0 = 0x0000;                         //设置尽可能低的DCOx,MODxdo{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// 清除 XT2、XT1、DCO 故障标志SFRIFG1 &= ~OFIFG;                      // 清除故障标志}while (SFRIFG1&OFIFG);                   // 测试振荡器故障标志__bis_SR_register(SCG0);                  //禁用 FLL 控制环路UCSCTL1 = DCORSEL_5;                      // 选择 DCO 范围 4-16MHz 操作。DCORSEL_7 范围8-23MHZUCSCTL2 |=dco_val;                           // 将 DCO 乘法器设置为 8MHz// (249 + 1) * 32768 = 8MHz   公式:fDCOCLKDIV= (N + 1) × (fFLLREFCLK÷ n)__bic_SR_register(SCG0);                  //启动FLL 控制环路__delay_cycles(250000);
}//按键初始化
void key_init(void)
{GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1);GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2,GPIO_PIN1);
}//按键扫描
void key_scan(void)
{if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1)){delay_ms(10);if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1)){while(!GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1));//180度舵机
//            Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1049);//45度
//            delay_ms(100);
//            Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1573);//90度
//            delay_ms(100);
//            Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,2097);//135度
//            delay_ms(100);
//            Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,2570);180度
//            delay_ms(100);
//            Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,524);//524.275 0度
//            delay_ms(100);//360度舵机//Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,524);//正转Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,2621);//反转}}else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1)){delay_ms(10);if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1)){while(!GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1));Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1573);//360度舵机 速度0}}
}int main(void)
{WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timersys_clock_conf(16);usart0_init();usart1_init();key_init();tima0_init(20971);//Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,524);//180度舵机 0度位置Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1573);//360度舵机 速度0__bis_SR_register(GIE);//中断使能while(1){key_scan();}
}

这篇关于msp430f5529标准库学习之SG90舵机使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393811

相关文章

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的