Other Parts Discussed in Thread: HALCOGEN
I am unable to generate a varying PWM with the example provided in the HACoGen 4.06.00.
I have a few doubts:
1) I could not find the light sensor mentioned in the example and hence used pin6 of ADC1(connected to the onboard pot). Please correct me if I am wrong but the TMS570LC43x doesn't have a light sensor.
2) The oscilloscope showed 5000ns period with 50% duty cycle(which was set initially in HALCoGen) but doesn't change even when I rotate the potentiometer.
3) Why were the following lines of codes added? The program doesn't use EMAC right?
uint8 emacAddress[6U] = {0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU};
uint32 emacPhyAddress = 1U;
For convenience, I have attached my project file and the example code here:
/** @example example_epwm_adc.c
* This is an example which describes the steps to create an example application to generate
* PWM output with varying duty (depending on an external input)
*
* @b Step @b 1:
*
* Create a new project.
*
* Navigate: -> File -> New -> Project
*
* @image html example_createProject.JPG "Figure: Create a new Project"
*
* @b Step @b 2:
* Configure driver code generation:
* - Enable ETPWM driver
* - Enable ADC driver
* - Disable others
*
* Navigate: -> TMS570LCxx /RM57x -> Enable Drivers
*
* @b Step @b 3:
*
* Configure pinmux module
* - Output pinmuxing : Select eTPWM1A at ball B5
* - Special pinmuxing : Use Alternate ADC 'Trigger Option-B'
* Enable TBCLK sync
*
* Navigate: -> PINMUX ->Pin Muxing
*
* @image html EPWM_OutputMux.JPG "Figure: Output Pinmuxing"
*
* Navigate: -> PINMUX ->Pin Muxing
*
* @image html EPWM_SplMux.JPG "Figure: Special Pinmuxing"
*
* @b Step @b 4:
*
* Configure ADC1 module
* - Select Alternate trigger EPWM_B for ADC1 Event Group
* - Select Pin 9 for Event group (Pin 9 is connected to a light sensor in HDK)
*
* Navigate: -> ADC1 -> ADC1 Group Event
*
* @image html EPWM_ADC_Config1.JPG "Figure: ADC configuration"
*
* @b Step @b 5:
*
* Configure EPWM module
* - Enable ETPWM1 and disable others
* - Set EPWM1 period as 5000ns
* - Enable ADC SOCB generation with following configuration
* - SOCBSEL : CTR_PRD
* - SOCBPRD : 3
*
* @b Step @b 6:
*
* Generate HALCGen code
*
* @b Step @b 5:
*
* Copy the source code below into your sys_main.c or replace sys_main.c with this file.
*
* The example file can also be found in the examples folder: ../HALCoGen/examples
*
* @note HALCoGen generates an empty main function in sys_main.c,
* please make sure that you link in the right main function or copy the source into the user code sections of this file.
*
*
* The generated PWM signal can be monitored at pin B5. You can see the duty of the signal being
* changed by varying the light density near the light sensor
*/
/*
* Copyright (C) 2009-2015 Texas Instruments Incorporated - www.ti.com
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
*
* Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* USER CODE BEGIN (0) */
/* USER CODE END */
/* Include Files */
#include "HL_sys_common.h"
#include "HL_system.h"
/* USER CODE BEGIN (1) */
#include "HL_etpwm.h"
#include "HL_adc.h"
/* USER CODE END */
/** @fn void main(void)
* @brief Application main function
* @note This function is empty by default.
*
* This function is called after startup.
* The user can use this function to implement the application.
*/
/* USER CODE BEGIN (2) */
/* USER CODE END */
uint8 emacAddress[6U] = {0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU};
uint32 emacPhyAddress = 1U;
void main(void)
{
/* USER CODE BEGIN (3) */
_enable_interrupt_();
adcInit();
etpwmInit();
adcEnableNotification(adcREG1, adcGROUP0);
adcStartConversion(adcREG1, adcGROUP0);
while(1);
/* USER CODE END */
}
/* USER CODE BEGIN (4) */
void adcNotification(adcBASE_t *adc, uint32 group)
{
adcData_t data;
uint32 count;
uint16 cmpA;
count = adcGetData(adcREG1, adcGROUP0, &data);
cmpA = (etpwmREG1->TBPRD * data.value)/0xFFF;
etpwmSetCmpA(etpwmREG1, cmpA);
}
/* USER CODE END */