This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430G2553:MSP430G2553

Guru**** 2540720 points
Other Parts Discussed in Thread: MSP430G2553

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/582367/ccs-msp430g2553-msp430g2553

部件号:MSP430G2553
主题中讨论的其他部件: MSP-EXP430G2

工具/软件:Code Composer Studio

尊敬的所有人:

我正在使用MSP430G2553和Matlab进行红圆对象跟踪项目。 当红色圆形物体移动时,汽车将跟踪红色圆形物体。 项目由图像处理和两部分组成

运动零件。 在运动中,I部分使用L298N电动机驱动器卡MSP430G2553。这款汽车由2个车轮组成,带有2个直流电动机和一个旋转脚轮。  MATLAB中的图像处理部分运行 顺畅。

但当红色球移动时,汽车无法跟踪红色物体。 当我在Code Composer Studio中编译代码时,它不会给出任何错误。 因此我在代码中找不到问题。 我添加了MSP430G2553代码和的部件

提供MSP430和MATLAB之间通信的图像处理代码。 我认为MATLAB代码的再管理器部分工作正常。

e2e.ti.com/.../Send_5F00_Code.txt

priorPorts = instrfind %查找MATLAB中的任何现有串行端口
删除(优先端口)%并将其删除
S =串行('COM3');
SET (s),'bandrate (波特率)',4800);
打开;

图像处理代码

案例1.
写入(s,'C');
案例2.
写入(s,'L');
案例3.
写入(s,'R');
个案4.
写入,'B';
个案5.
fwrite (s,'F');
否则
fwrite(s),'N';
结束

我希望您能够提供信息。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在MATLAB一侧,您初始化UART波特率为4800,而MSP430代码设置为9600,因此两者之间可能存在通信错误。 您还应确保没有奇偶校验位且仅发送一个停止位,并且MATLAB已连接到正确的MSP430应用UART COM端口。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的Ryan:

    我将波特率更改为9600,我确信我不发送奇偶校验位和一个停止位。 另外,我检查了Matlab是否连接到正确的MSP430应用UART COM端口。 但我在代码中找不到什么问题? 请帮帮我。

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    确保MSP-EXP430G2的J3上的RXD/TXD跳线正确对齐。 从简单的UART回波代码示例和终端程序开始,验证您的PC和MSP430目标器件之间的通信。 使用逻辑分析仪和示波器屏幕截图进一步确定数据是否正确发送至MSP430G2553。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Ryan;

    我已正确调整了RXD/TXD销。 然后我用UART模块和超级终端程序制作了一个回显示例。 此程序工作正常。 我认为我的问题是PWM部分。 我无法使用PWM同时转动两个电机。 我在这个项目中使用L298电机驱动器卡。 连接至插卡的OUT3和OUT4连接器的电机无法转动。 例如,我在下面写下代码,仅使用PWM转动一个电机

    在此代码中,我将电机频率调整为20 kHz。 如果频率等于20 kHz,则电动机周期等于T=1/f=1/2万 50us。 我使用时钟源作为SMCLK。 SMCLK由DC0提供,DCO调整为1MHz。
    因此,我写入TA0CCRO=50,并调整了TA0CCR1=30。 
    然后我进行了插针连接。
    WFP 1.2 1.3 (1
    
    局)>>WFP 1.1 (1局)>>IN 2
    
    该代码可以快速转动马达(连接到OUT1和OUT2的马达)。 但是如果我用这个代码尝试转动其它马达,马达不能转动。我连接到PWM输出的WFP 1.2 到ENB,WFP 1.1 到in3,WFP 1.3 到IN4。
    
    #include <MSP430-h>
    
    int main (void){
    WDTCTL = WDTPW | WDTHOLD;	//停止看门狗计时器
    DCOCTL=CALDCO_1MHz;
    BCSCTL1=CALC1_1MHz;
    
    P1DIR |=BIT2;//PWM输出
    P1SEL |=BIT2;
    
    TA0CCR0 = 50;
    TA0CCTL1 = OUTMOD_7;
    TA0CCR1 = 30;
    TA0CTL = tassel_2 + MC_1;
    
    P1DIR |=(BIT1+BIT3);
    而(1){
    P1OUT &=~(BIT1);
    P1OUT|=(BIT3);
    }
    } 

       然后我尝试了下面的代码,它不能像上面的代码那样转动右电机。 当我给右侧电机提供能量时,电机可以移动。 因此,问题不在于电机。 但是,当我尝试移动两个电机时,只有一个电机可以移动(由IN1和IN2驱动的电机)。

    #include <MSP430-h>
    
    int main (void){
    WDTCTL = WDTPW | WDTHOLD;	//停止看门狗计时器
    DCOCTL=CALDCO_1MHz;
    BCSCTL1=CALC1_1MHz;
    P1DIR || BIT6;//将引脚1.6 设置为输出方向。
    P1SEL || BIT6;//选择引脚1.6 作为PWM输出。
    TA0CCR0 = 255;//将计时器A0捕获/比较0
    寄存器中的周期设置为255
    TA0CCTL1 = OUTMOD_7;
    TA0CCR1 = 255;
    TA0CTL = tassel_2 + MC_1;//tassel_2选择SMCLK作为时钟
    源,而MC_1则告诉它计数到TA0CCR0中的值。
    
    P1DIR|=BIT1+BIT2+BIT3+BIT4;
    而(1){
    P1OUT|=BIT1+BIT3;
    P1OUT&=~(BIT2+BIT4);
    }
    
    

       我在下面对PIN连接进行了描述。

    1.1 1.4 (风电)>>IN1 WFP 1.2 1.6
    >>IN2
    WFP 1.3 >>IN3
    WFP ->IN4
    WFP PWM>>ENA&ENB(我将PWM输出连接到L298马达驱动卡的ENA和ENB插针。 此外,电机输出分别连接至OUT1,OUT2,OUT3和OUT4连接器。然后,MSP430的GND和9V电池的GND连接至
    L298的GND连接器。
    通过使用此代码或另一代码,我无法同时转动两个电机。只有一个电机可以转动。 

       为什么我不能使用PWM同时转动2个电机? 我的错在哪里? 请帮帮我。 此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用示波器或屏幕截图分析器查看ENA和ENB线路以及L298输出,如果可能,请勿对ENA和ENB执行多路复用,而是从单独的引脚驱动启用引脚(在1.2 1.6 上使用0.1 或0.2 的1.1 1.2 或的3级/5级/5级)。 您应确保您的电源足以承受两个电机的电流消耗。

    此致,
    Ryan