Quantcast
Channel: Forums - Recent Threads
Viewing all 262198 articles
Browse latest View live

CC1100: Inverted layout for RF-N and RF-P and consequences for FCC testing

$
0
0

Part Number:CC1100

If by mistake the layout has reversed pins 12 and 13 (RF_P and RF_N) of CC1100, what would be the consequences for the performance of the RF circuit? Are there any risks with out of band frequencies? In this particular layout, the balun is the same as the one recommended in our documentation (below). Thank you!


BQ40Z50: The next step after GPC - Rbtweak

$
0
0

Part Number:BQ40Z50

Hi Team,

Just would like to confirm the correct procedure after Rbtweak.

After Rbtweak process, the result could be a golden image or I need to do a learning cycle to create new gold image? 

Or more comments for this? 

RTOS/TDA3MA: Task_sleep() stuck at DSP1

$
0
0

Part Number:TDA3MA

Tool/software:TI-RTOS

Hi all.

I'm trying to run a very simple (sample) program on DSP1 processor of the TDA3xx device.

The code is: 

/*
* ======== main.c ========
*/

#include <xdc/std.h>

#include <xdc/runtime/Error.h>
#include <xdc/runtime/System.h>

#include <ti/sysbios/BIOS.h>

#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/knl/Clock.h>

/*
* ======== taskFxn ========
*/
Void taskFxn(UArg a0, UArg a1)
{
System_printf("DSP1: enter taskFxn()\n");
System_flush();

Task_sleep(10);

System_printf("DSP1: exit taskFxn()\n");

System_flush(); /* force SysMin output to console */
}

/*
* ======== main ========
*/
Int main()
{
Task_Handle task;
Error_Block eb;

System_printf("DSP1: enter main()\n");
System_flush();

Error_init(&eb);
task = Task_create(taskFxn, NULL, &eb);
if (task == NULL) {
System_printf("DSP1: Task_create() failed!\n");
BIOS_exit(0);
}

BIOS_start(); /* does not return */
return(0);
}

The problem happens when the program enters Task_sleep(10). The program enters this sleep and never leaves it.

I can see all prints till entering the sleep.

Following is the .CFG file:

var Defaults = xdc.useModule('xdc.runtime.Defaults');
var Diags = xdc.useModule('xdc.runtime.Diags');
var Error = xdc.useModule('xdc.runtime.Error');
var Log = xdc.useModule('xdc.runtime.Log');
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
var Main = xdc.useModule('xdc.runtime.Main');
var Memory = xdc.useModule('xdc.runtime.Memory')
var SysMin = xdc.useModule('xdc.runtime.SysMin');
var System = xdc.useModule('xdc.runtime.System');
var Text = xdc.useModule('xdc.runtime.Text');

var BIOS = xdc.useModule('ti.sysbios.BIOS');
var Swi = xdc.useModule('ti.sysbios.knl.Swi');
var Task = xdc.useModule('ti.sysbios.knl.Task');
var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
var Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
var Clock = xdc.useModule('ti.sysbios.knl.Clock');

/*
* Uncomment this line to globally disable Asserts.
* All modules inherit the default from the 'Defaults' module. You
* can override these defaults on a per-module basis using Module.common$.
* Disabling Asserts will save code space and improve runtime performance.
Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF;
*/

/*
* Uncomment this line to keep module names from being loaded on the target.
* The module name strings are placed in the .const section. Setting this
* parameter to false will save space in the .const section. Error and
* Assert messages will contain an "unknown module" prefix instead
* of the actual module name.
Defaults.common$.namedModule = false;
*/

/*
* Minimize exit handler array in System. The System module includes
* an array of functions that are registered with System_atexit() to be
* called by System_exit().
*/
System.maxAtexitHandlers = 4;

/*
* Uncomment this line to disable the Error print function.
* We lose error information when this is disabled since the errors are
* not printed. Disabling the raiseHook will save some code space if
* your app is not using System_printf() since the Error_print() function
* calls System_printf().
Error.raiseHook = null;
*/

/*
* Uncomment this line to keep Error, Assert, and Log strings from being
* loaded on the target. These strings are placed in the .const section.
* Setting this parameter to false will save space in the .const section.
* Error, Assert and Log message will print raw ids and args instead of
* a formatted message.
Text.isLoaded = false;
*/

/*
* Uncomment this line to disable the output of characters by SysMin
* when the program exits. SysMin writes characters to a circular buffer.
* This buffer can be viewed using the SysMin Output view in ROV.
SysMin.flushAtExit = false;
*/

/*
* The BIOS module will create the default heap for the system.
* Specify the size of this default heap.
*/
BIOS.heapSize = 8192;

/*
* Build a custom SYS/BIOS library from sources.
*/
BIOS.libType = BIOS.LibType_Debug;

/* System stack size (used by ISRs and Swis) */
Program.stack = 65536;

/* Circular buffer size for System_printf() */
SysMin.bufSize = 0x200;

/*
* Create and install logger for the whole system
*/
var loggerBufParams = new LoggerBuf.Params();
loggerBufParams.numEntries = 16;
var logger0 = LoggerBuf.create(loggerBufParams);
Defaults.common$.logger = logger0;
Main.common$.diags_INFO = Diags.ALWAYS_ON;

System.SupportProxy = SysMin;
Task.idleTaskStackSection = ".bss:taskStackSection";
Task.defaultStackSection = ".bss:taskStackSection";
Main.common$.diags_INTERNAL = Diags.ALWAYS_ON;
Defaults.common$.diags_INTERNAL = Diags.ALWAYS_ON;
BIOS.customCCOpts = "-mv6600 --abi=eabi -q -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 --program_level_compile -g";
BIOS.cpuFreq.lo = 500000000;

I'm using the following:

Compiler version: TI v8.2.3

XDCtools version: 3.50.5.12_core

Device endianness: little

Runtime support library: rts6600_elf.lib

Target: ti.targets.elf.C66

Platform: ti.platforms.simVayu

Sincerely

Alex

CC3x20 vs CC2650: recommendation

$
0
0

Hello everyone!

I am currently looking to select an MCU for an industrial application.
The application requires a few interfaces only (1x SPI, 30x IO with IO expander, 1x UART, 1x I2C) plus a wireless interface.
This interface may be WiFi or Bluetooth and is used for configuration and firmware updates.
CC2640/CC2650 or CC3220/3120/3100 pre-certified modules look very promising.

I would like some help in deciding what module should be used. Our main focus is easy/streamlined firmware development.

  1. Target hardware function: Controlling several relais based on sensor data, not time critical. Wireless interface for user.
  2. not important: Price, wifi or bluetooth, power consumption, data rate
  3. important: update over the air, software stacks for wireless interface, easy software interface for application
  4. All CC... devices support update over the air. Any major differences between BT and WiFi versions?
  5. Stacks are provided for WiFi and Bluetooth. They probably work similar? What is easier to use and modify in the application?
  6. The WiFi CC... devices provide TCP/IP, HTTP etc so could probably run a websever without too much effort? Can the webserver run on the M0 or would this be part of the application? Example?

What CC would you recommend for this application and why?

BQ27531-G1: Can I make the Gas Gauge control the Charger(BQ24192) by default without the host processor needing to send the GG_CHGRCTL_ENABLE command?

$
0
0

Part Number:BQ27531-G1

I've got a battery charger circuit using the BQ27531-G1 and BQ24192. The battery thermister is connected to the gas gauge, so that we can accurately control the charging current and voltage based on battery temperature. This is also used to stop charging if the battery is over a safe temperature. By configuring the gas gauge with the GG_CHGRCTL_ENABLE command, it safely stops charger from charging when the temperature exceeds a safe range. This is all working as intended.

However, if the battery dies or is disconnected, and then the device is plugged in to charge while turned off (host processor off), then the gas gauge stops updating the charger, allowing it to charge beyond the safe temperature. It's only after the processor is turned on and the GG_CHGRCTL_ENABLE command is sent, that it behaves safely. So is there anyway to make the GG_CHGRCTL_ENABLE on by default without the host processor enabling it? We tried having a separate thermister for the charger(located on the PCB), but when the device is on the PCB gets hotter than the battery, thereby stopping charging pre-maturely.

If this can't be done, is there a why that will work properly only using the battery thermister?

Thanks in advance,

Kenzie

RTOS/CC2650: Why does driverlib FlashProgram() return FAPI_STATUS_FSM_ERROR when programming 128-byte blocks?

$
0
0

Part Number:CC2650

Tool/software:TI-RTOS

I'm using the example application that came with TIMAC SDK and includes TI-RTOS 2.11. When I add a call to FlashProgram() from driverlib, every once in a while it returns FAPI_STATUS_FSM_ERROR and fails to program the memory (leaves 64-byte blocks of flash memory in erased state). The data block size that I try to program is 128 (TRM says 128-byte blocks can be programmed twice as fast as individual words). When I reduce the block size to 64 bytes, everything seems to work OK. What does the FAPI_STATUS_FSM_ERROR mean and how do I resolve it for 128-byte blocks?

Smart Charger that automatically turns off power to the device after it is fully charged

$
0
0

Hi! I am a High school senior and currently enrolled in a PLTW Engineering Design and Development class. In this class we are required to find a problem and then create a product to solve that problem. My team's product is a smart charger that can identify that a cellphone is at 100% and then turn off the power to the device. I don't know much about electrical engineering and would really appreciate the help! I was wondering if there are any circuit boards that have a overvoltage/overcurrent protection and can turn off the power after the phone has reached 100%. I was planning on connecting this component to a female usb port. Thank you for your help!

Thanks 

LM3668: Resistance between VIN and GND while unpowered

$
0
0

Part Number:LM3668

I have a prototype device which uses a LM3668 buck-boost converter to regulate 5V down to 3.3V. Recently, the device failed and there is now an electrical short between the net tied to VIN pins (V_UNREG) and the net tied to the GND pins (GND) on the LM3668 while the device is unpowered. What is the expected resistance when measuring between the two nets shown in the schematic below when power is not applied to the DC-DC converter? I am seeing around 2 Ohms and am unsure if the problem is a failed LM3668 or another device on the V_UNREG net.


LMK04828: Configuring the LMK04828 to use SYSREF Divider as PLL2 feedback path

$
0
0

Part Number:LMK04828

I am trying to configure the LMK04828 to use the SYSREF clock at the feedback path to PLL2. I am inputting a 100MHz clock on OSCin, bypassing the 2x multiplier and setting the R2 divider to 2. The output of the PLL is going to the SYSREF divider which is set to 30. I have then set the FB_Mux to  output SYSREF_DIV and the PLL2_IN_MUX to select FB_Mux and set the N2 divider to 2. In this configuration the PLL will not lock and I do not know why. If I use the same setting but change PLL2_IN to use the N2 Prescaler and set this prescaler to 30 the PLL will lock. Can someone please provide me with the programming steps to configure the part in this way?

I have attached the register settings I am using in the order that I am programming them for reference.

0x138 0x21       
0x139 0x00
0x13A 0x00
0x13B 0x1E
0x13C 0x00
0x13D 0x08
0x13E 0x03
0x13F 0x15
0x140 0x03
0x141 0x00
0x142 0x00
0x143 0x11
0x144 0x00
0x145 0x7F
     
 ----------- CLKin Control (0x146 - 0x149) ----------
0x146 0x18
0x147 0x0A
0x148 0x0B
0x149 0x0B
     
 ------ Reset_Mux and Reset_type --------------
0x14A 0x02
     
 ---- 0x14B - 0x152 Holdover -----------------
0x14B 0x32
0x14C 0x00
0x14D 0x00
0x14E 0x00
0x14F 0x7F
0x150 0x03
0x151 0x02
0x152 0x00
     
 --------- PLL1 Configuration (0x153 - 0x15F) ------------
0x153 0x00
0x154 0x01
0x155 0x00
0x156 0x01
0x157 0x00
0x158 0x01
0x159 0x00
0x15A 0x0A
0x15B 0xD4
0x15C 0x20
0x15D 0x00
0x15E 0x00
0x15F 0x0B
     
 -------- PLL2 Configuration (0x160 - 0x16E) ------------
0x160 0x00
0x161 0x02
0x162 0x44
0x163 0x00
0x164 0x00
0x165 0x19
     
----------- Prog ng registers 0x17C and 0x17D
0x171 0xAA
0x172 0x02
0x17C 0x15
0x17D 0x33
     
0x166 0x00
0x167 0x00
0x168 0x02
0x16A 0x20
0x16B 0x00
0x16C 0x00
0x16D 0x00
0x16E 0x13
     
 ---- -- Misc registers ----------------
0x173 0x00
0x182 0x00
0x183 0x00
     
 ----- load SYSREF Divider ----------------
0x143 0xB1
0x143 0x11
0x144 0xFF
0x139 0x03
0x13F 0x15

AM3354: AM3354: NAND ECC for production

$
0
0

Part Number:AM3354

we are using the AM335x for an application that going into production. The design uses NAND for data storage.

We'd like to flash the NAND directly before installing it on our board. The NAND programmer needs to have the ECC implementation algorithm in order to correctly program the NAND.

The AM335x has BCH8 implemented in hardware, so, while the algorithm is BCH8, I can't find any reference to the actual implementation.

Has anyone been able to use an independent NAND programmer to flash NAND that is compatible with the AM335x? What algorithm implementation did you use?

Can anyone from TI disclose the implementation details of the BCH8 algorithm used for ECC in the AM335x?

I know there are BCH8 software examples in U-Boot and the Linux kernel, but an example is not the same thing as the actual implementation.

Related resources:

e2e.ti.com/.../326542

processors.wiki.ti.com/.../Raw_NAND_ECC

Compiler/TM4C1294NCPDT: Does TI linker generate something like etext, edata and end?

$
0
0

Part Number:TM4C1294NCPDT

Tool/software: TI C/C++ Compiler

Usually linkers provide the symbols etext, edata and end to indicate the one-past-the-last address of sections text, data and bss, respectively, so a programmer can use those symbols in a C program.

I'd like to have access to those symbols to be able to know what is the address of ram memory that corresponds to the first address of free memory, so I can use end as the start of heap.

Is there a flag that makes the linker provide those symbols to a C program? Is there an easier way of knowing what is the free memory region?

P.S.: I know the compiler libraries probably implement basic memory management and I could just use the standard C functions for dynamic memory allocation. But I want to implement it on my own for two reasons:

  1. I want to learn how to do it;
  2. I'm writing an OS and I want the OS to manage the memory.

CCS: CC3120 Wifi pluging - How to test OTA examples.

$
0
0

Tool/software: Code Composer Studio

Hi,

I am trying to build OTA examples on CCS but I can not. I think I miss one path in configuration but I don't know how to solve.

>> Compilation failure
makefile.defs:66: fallo en las instrucciones para el objetivo 'CdnGithub.obj'
gmake: se sale del directorio '/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/net/ota/ccs'
"/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/drivers/net/wifi/porting/cc_pal.h", line 27: fatal error: cannot open source file "ti/drivers/dpl/SemaphoreP.h"
1 catastrophic error detected in the compilation of "/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/net/ota/source/CdnClient.c".
Compilation terminated.
gmake: *** [CdnClient.obj] Error 1
"/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/drivers/net/wifi/porting/cc_pal.h", line 27: fatal error: cannot open source file "ti/drivers/dpl/SemaphoreP.h"
1 catastrophic error detected in the compilation of "/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/net/ota/source/ota_json.c".
Compilation terminated.
gmake: *** [ota_json.obj] Error 1
"/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/drivers/net/wifi/porting/cc_pal.h", line 27: fatal error: cannot open source file "ti/drivers/dpl/SemaphoreP.h"
1 catastrophic error detected in the compilation of "/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/net/ota/source/ota_archive.c".
Compilation terminated.
gmake: *** [ota_archive.obj] Error 1
"/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/drivers/net/wifi/porting/cc_pal.h", line 27: fatal error: cannot open source file "ti/drivers/dpl/SemaphoreP.h"
1 catastrophic error detected in the compilation of "/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/net/ota/source/ota_httpclient.c".
Compilation terminated.
gmake: *** [ota_httpclient.obj] Error 1
"/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/drivers/net/wifi/porting/cc_pal.h", line 27: fatal error: cannot open source file "ti/drivers/dpl/SemaphoreP.h"
1 catastrophic error detected in the compilation of "/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/net/ota/source/ota_lib.c".
Compilation terminated.
gmake: *** [ota_lib.obj] Error 1
"/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/drivers/net/wifi/porting/cc_pal.h", line 27: fatal error: cannot open source file "ti/drivers/dpl/SemaphoreP.h"
1 catastrophic error detected in the compilation of "/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/net/ota/source/CdnVendors/CdnDropboxV2.c".
Compilation terminated.
gmake: *** [CdnDropboxV2.obj] Error 1
"/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/drivers/net/wifi/porting/cc_pal.h", line 27: fatal error: cannot open source file "ti/drivers/dpl/SemaphoreP.h"
1 catastrophic error detected in the compilation of "/home/antonio/ti/simplelink_sdk_wifi_plugin_1_55_00_42/source/ti/net/ota/source/CdnVendors/CdnGithub.c".
Compilation terminated.
gmake: *** [CdnGithub.obj] Error 1
gmake: Debido a los errores, el objetivo 'all' no se reconstruyó.

PGA460 BOOSTXL board with MSP430G2553

$
0
0

1. I have used the MSP430F5529LP board to interface with the GUI for using the PGA430 BOOST XL EVM. It has been specified that the EVM is designed to be cross compatible with other TI launchpad boards. I have an MSP430G2553 board with me and so attempted to upload the GetDistance example code for the PGA460_USSC library. I get the following error message:

Energia: 1.6.10E18 (Windows 8.1), Board: "MSP-EXP430G2 w/ MSP430G2553"

Build options changed, rebuilding all
C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp: In function 'void spi_initialize()':

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:67:2: error: 'UCB1CTL1' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:68:2: error: 'UCB1CTL0' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:71:45: error: 'PM_UCB1CLK' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:72:46: error: 'PM_UCB1SDA' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:73:46: error: 'PM_UCB1SCL' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:75:2: error: 'UCB1BR0' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:76:2: error: 'UCB1BR1' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp: In function 'void spi_disable()':

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:86:5: error: 'UCB1CTL1' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp: In function 'uint8_t spi_send(uint8_t)':

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:94:2: error: 'UCB1TXBUF' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:95:9: error: 'UCB1STAT' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:98:9: error: 'UCB1RXBUF' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp: In function 'void spi_set_divisor(uint16_t)':

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:109:2: error: 'UCB1CTL1' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:110:2: error: 'UCB1BR0' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:111:2: error: 'UCB1BR1' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp: In function 'void spi_set_bitorder(uint8_t)':

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:120:5: error: 'UCB1CTL1' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:121:5: error: 'UCB1CTL0' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp: In function 'void spi_set_datamode(uint8_t)':

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:130:5: error: 'UCB1CTL1' was not declared in this scope

C:\Users\Kevin\Documents\Energia\libraries\slac741g\utility\pga460_usci_spi.cpp:133:9: error: 'UCB1CTL0' was not declared in this scope

Multiple libraries were found for "PGA460_USSC.h"
Used: C:\Users\Kevin\Documents\Energia\libraries\slac741g
Not used: C:\energia-1.6.10E18\libraries\slac741g
Not used: C:\energia-1.6.10E18\libraries\slac741g
Not used: C:\energia-1.6.10E18\libraries\slac741g
Not used: C:\energia-1.6.10E18\libraries\slac741g
exit status 1
Error compiling for board MSP-EXP430G2 w/ MSP430G2553.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

However I get no such error message when I select the MSP-EXP430F5529LP board for compiling and uploading.

2. With the GetDistance code uploaded to the MSP-EXP420F5529LP, I dont get any text on the Serial Monitor (Baudrates match at 9600). I also noticed multiple COM ports being shown just for the one board (with everything else disconnected). 

SN55LVDS33-SP: Cold sparing

$
0
0

Part Number:SN55LVDS33-SP

Is it possible to drive the inputs without damaging the device in an unpowered state?

In other words, does the LVDS33 support cold sparing the way that LVDS32 does?

Thanks.

TMS320F28377D: sine-wave generation with epwm-modules

$
0
0

Part Number:TMS320F28377D

Hello Community,
i want to use ePWM-Modules to produce 3 sine-waves (different phaseangle) to control a inverter. The Inverter should be possible in the future to drive a PMSM, but for the moment I want a solid sine-wave-Frequence and only want to influence sine-wave amplitude.
I read about a software-sine-wave-generator. -->SGENTI_3
This I want to use to control the ePWM-Modules.
1.Is that the right way or am I wrong?
2.This Generator is used to produce every cyle a value for example to feed "CMPA" to generat the Sine-Wave-shape?
3.For edge synchronous I think I understand how to use this, but can I use this Generator even for center synchronous ePWM? When, how can i do it right?
4.Is there any application Note or Code Example for this task, that would be helpful to read?

thanks in advanced
basti


TMS320F28035: InstaSPIN SPEED_MEAS_CAP RPM does not match mechanical RPM

$
0
0

Part Number:TMS320F28035

I am using the InstaSPIN BLDC to run a small 12 volt motor. I am using the SPEED_PR_MACRO to calculate the RPM of the motor. From what I can see this just counts the number of electrical rotations within a certain time and calculates the RPM. The speed RPM output from this fucntions seems to be very noisy, so I filter it in order to get an averaged value. The RPM seems to be with 20 RPM most of the time for some motors, but around 1400 RPM on some motors the RPM reported by the software is 1400, but the mechanical RPM of the motor is around 1300. All the motors tested are the same model motor, but I guess slight differences in the inductance from motor to motor can cause different RPM error.

I am just wondering is why there is so much noise on the speedRPM and what can I do to get the speedRPM to match the mechanical RPM? Is there a better way to measure the RPM?

Below is the code which I believe is still the same as the example InstaSpin BLDC from the TI lab.

//while counting up we want positive speed

if((mod_dir1.Counter==5)&&(PreviousState==4)&&(mod_dir1.TrigInput))

{

speed1.TimeStamp = VirtualTimer;

SPEED_PR_MACRO(speed1);

SpeedLoopFlag = TRUE;

}

//while counting down we want negative speed

elseif((mod_dir1.Counter==0)&&(PreviousState==1)&&(mod_dir1.TrigInput))

{

speed1.TimeStamp = VirtualTimer;

SPEED_PR_MACRO(speed1);

speed1.Speed = _IQmpy(speed1.Speed,_IQ(-1.0));

SpeedLoopFlag = TRUE;

}

Compiler/TMS320F28075: DCAN interface register IF1CMD and the MSG_NUM field

$
0
0

Part Number:TMS320F28075

Tool/software: TI C/C++ Compiler

Hi everyone,

I am confused by the behaviour of the CAN_IF1CMD register with regard to its MSG_NUM bits.

When stepping through code that writes zero to the register with a 32-bit access (MOVL)  and reading the register after the write, the value read back is not 0x00000000 but 0x00000020. I know the TRM explains that zero is an invalid message number but this is a surprising result as the can_loopback_bitfields example in C2000Ware_1_00_03_00 uses similar code:

CanaRegs.CAN_IF1CMD.all = 0;
(...)

//
// Set the Control, Mask, and Arb bit so that they get transferred to the
// Message object.
//
CanaRegs.CAN_IF1CMD.bit.Control = 1;
CanaRegs.CAN_IF1CMD.bit.Arb = 1;
CanaRegs.CAN_IF1CMD.bit.Mask = 1;
CanaRegs.CAN_IF1CMD.bit.DIR = 1;

(...)

//
// Transfer data to message object RAM
//
CanaRegs.CAN_IF1CMD.bit.MSG_NUM = objID;

So after the first instruction above the value read back from CanaRegs.CAN_IF1CMD.all is going to be 0x00000020. But when executing for example CanaRegs.CAN_IF1CMD.bit.Control = 1 the instructions actually generated look like this:

080e11:   06C4        MOVL         ACC, *+XAR4[0]
080e12:   5110        ORB          AH, #0x10
080e13:   1EC4        MOVL         *+XAR4[0], ACC

So the value written to CAN_IF1CMD will be 0x00100020 where one would expect 0x00100000. As far as I can tell the consequence should be that the write command of the interface registers is triggered to transfer data to message object number 32 once for each of the 4 lines then once more for the proper message object given by objID.

I think I am missing something, can you help me understand?

Cheers,

Pierre

 

TMS320F28377D: get Data out Sigma-Delta Filter to analyze and compare

$
0
0

Part Number:TMS320F28377D

Hello Community,
i want to use sigma-delta-filter (SDF) on this board (LAUNCHXL) to measure current and voltage.
For a research work I want to compare the results from SDF with other measure oppurtunities.
1.Is it possible to get the filtered data out of the board and maybe save on SD-card or on the PC? (the data of the bitstreams would not be necessary but helpful.)

2.If this is possible than I want do the same with mesured data out of a ADC which is connected to a closed-loop-hall-sensor.
Is there a way? Application Note or something else?

3.And at the end I want to get the data from a bus-signal pre filtered by a second TI-Board to compare all oppurtunities.
Is there a way? Application Note or something else?

thanks in advance
basti

CCS/MSP430F5529: Motor Control using MSP430F5529

$
0
0

Part Number:MSP430F5529

Tool/software: Code Composer Studio

I have been trying to implement motor control using an L293D with an MSP430F5529. I am not able to rotate the motor for a specific time and make it stop for a specific time. My code is as follows:

#include<msp430.h>
void Delay(int);
void Stop1();
void rotate_Clockwise();
void main()
{
WDTCTL = WDTPW + WDTHOLD; // Stop the Watchdog
P2DIR |= BIT3 + BIT4 + BIT6; // P2.3,P2.4,P2.6 all output
P2OUT &= ~BIT3 + BIT4 + BIT6; // Clear P2.3,P2.4,P2.6
start: rotate_Clockwise();
// Rotate the Motor clockwise
Delay(5);
Stop1();
Delay(10);
goto start;
}//End of Main
void Delay(int j)
{
int i,k;
for(i=0;i<j;i++)
for(k=0;k<0x00FF;k++);
}
void Stop1()
{
P2OUT &= ~BIT3+BIT4+BIT6;
}
void rotate_Clockwise()
{
P2OUT |= BIT3; // P2.3 = 1,P2.4 = 0
P2OUT |= BIT6; // P2.6 = 1 ,3&4_EN = 1,Motor is started
}

When I debug the program step by step, the motor stops. But when I run the program continuously, it doesn't. I thought of implementing timers instead of for loops. But I am not sure where to start on timers with the MSP. Any help will be much appreciated.

CC2650: CC2650

Viewing all 262198 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>